package rjcs; import org.openqa.selenium.firefox.FirefoxDriver; public class qhjb { public static void main(String[] args) { System.setProperty("webdriver.firefox.bin","C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe"); //設置火狐的安裝路徑,防止系統找不到 FirefoxDriver driver = new FirefoxDriver(); //初始化FireFox瀏覽器實例,並打開瀏覽器 try { driver.manage().window().maximize(); //最大化窗口 Thread.sleep(5000); driver.get("https://www.baidu.com"); //打開一個網址,方法一 //driver.findElementByLinkText("地圖").click(); //通過連接文字打開地圖 boolean a= driver.findElementById("kw").isDisplayed(); //是否看見 System.out.println("元素是否可見:"+a); boolean b= driver.findElementById("kw").isEnabled(); //是否可編輯操作 System.out.println("元素是否編輯:"+b); String s = driver.findElementById("kw").getTagName(); //查看標簽名字 System.out.println("kw標簽名字:"+s); String w = driver.findElementById("su").getTagName(); //查看標簽名字 System.out.println("su標簽名字:"+w); String p = driver.findElementById("kw").getAttribute("class"); //用於獲取元素的屬性值 System.out.println("kw的class屬性值名字:"+p); String g = driver.findElementByPartialLinkText("圖").getText(); System.out.println("連接文字 地圖 的 文本值:"+g); Thread.sleep(10000); driver.findElementById("kw").sendKeys("中國"); Thread.sleep(10000); driver.findElementById("kw").clear(); Thread.sleep(10000); driver.findElementById("kw").sendKeys("美國"); driver.findElementById("su").click(); Thread.sleep(10000); }catch (Exception e) { e.printStackTrace(); }finally { driver.quit(); } } }
執行結果:
元素是否可見:true
元素是否編輯:true
kw標簽名字:input
su標簽名字:input
su標簽名字:s_ipt
連接文字 地圖 的 文本值:地圖
====================================================================================================================
package rjcs; import org.openqa.selenium.Dimension; import org.openqa.selenium.Point; import org.openqa.selenium.firefox.FirefoxDriver; public class njcsxdy { public static void main(String[] args) { System.setProperty("webdriver.firefox.bin","C:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe"); //設置火狐的安裝路徑,防止系統找不到 FirefoxDriver driver = new FirefoxDriver(); //初始化FireFox瀏覽器實例,並打開瀏覽器 try { driver.manage().window().maximize(); //最大化窗口 Thread.sleep(5000); Dimension targetSize = new Dimension(300,500); //設置窗口大小為1024*768 driver.manage().window().setSize(targetSize); System.out.println(driver.manage().window().getSize()); //獲取窗口的大小 Thread.sleep(5000); Point targetPosition01 = new Point(300, 600); //設置窗口左上角那個點出現的位置為(300,600) driver.manage().window().setPosition(targetPosition01); System.out.println(driver.manage().window().getPosition()); Thread.sleep(5000); Point targetPosition02 = new Point(600, 800); //設置窗口左上角那個點出現的位置為(600,800) driver.manage().window().setPosition(targetPosition02); System.out.println(driver.manage().window().getPosition()); Thread.sleep(5000); driver.manage().window().maximize(); //最大化窗口 Thread.sleep(5000); driver.get("https://www.baidu.com"); //打開一個網址,方法一 //driver.findElementByLinkText("地圖").click(); //通過連接文字打開地圖 boolean a= driver.findElementById("kw").isDisplayed(); //是否看見 System.out.println("元素是否可見:"+a); boolean b= driver.findElementById("kw").isEnabled(); //是否可編輯操作 System.out.println("元素是否編輯:"+b); String s = driver.findElementById("kw").getTagName(); //查看標簽名字 System.out.println("kw標簽名字:"+s); String w = driver.findElementById("su").getTagName(); //查看標簽名字 System.out.println("su標簽名字:"+w); String p = driver.findElementById("kw").getAttribute("class"); //用於獲取元素的屬性值 System.out.println("kw的class屬性值名字:"+p); String g = driver.findElementByPartialLinkText("圖").getText(); System.out.println("連接文字 地圖 的 文本值:"+g); Thread.sleep(10000); driver.findElementById("kw").sendKeys("中國"); Thread.sleep(10000); driver.findElementById("kw").clear(); Thread.sleep(10000); driver.findElementById("kw").sendKeys("美國"); driver.findElementById("su").click(); Thread.sleep(10000); driver.navigate().to("https://www.ifeng.com"); //此頁面打開新頁面 Thread.sleep(10000); driver.navigate().back(); //后退 Thread.sleep(10000); driver.navigate().forward(); //前進 Thread.sleep(10000); driver.navigate().refresh(); //刷新當前頁 Thread.sleep(10000); }catch (Exception e) { e.printStackTrace(); }finally { driver.quit(); } } }
執行結果:
(300, 500)
(300, 600)
(600, 800)
元素是否可見:true
元素是否編輯:true
kw標簽名字:input
su標簽名字:input
kw的class屬性值名字:s_ipt
連接文字 地圖 的 文本值:地圖
=====================================================================================================================
(1)、標准寫法
標准寫法為//標簽名[@屬性名="屬性值"],比如我們要找那個title為搜索熱點的元素,則xpath就是這樣寫//div[@title='搜索熱點'](這里屬性值用單引號或者雙引號都可以,//這個意思是從全局元素始中查找);
(2)、獲取父元素
獲取父元素,xpath語句中要加個/..即可,so要多級父元素,就多加幾個即可,比如我們要獲取上圖中最上面那個div元素,其xpath可以這樣寫//div[@title='搜索熱點']/../../..;
(3)、獲取兄弟元素
獲取兄弟元素,這個就可以先定位到其父元素,再下級尋找,比如上圖黃色標識那個元素,xpath就可以這樣寫//div[@title='搜索熱點']/../table;
(4)、多屬性方式定位
有時候我們用單一屬性進行查找還是會有重復的元素,那么怎么辦呢,其實屬性我們可以加多個,譬如上圖中那個a標簽元素,其xpath就可以這樣寫//a[@title='謝霆鋒山寨歌迷會'][text()='謝霆鋒山寨歌迷會'],注意那個[text()='謝霆鋒山寨歌迷會']為text的專有寫法;
(5)、獲取子元素
子元素獲取,子元素的話就比較簡單了,可以直接在元素后加[n]就可以了,譬如要獲取上圖中第二個td標簽的元素,則xpath可以寫為//a[@title='謝霆鋒山寨歌迷會'][text()='謝霆鋒山寨歌迷會']/../../../td[2],注意這個td[2]中的2即為其編號,這里編號都是從1開始,如果是第一個td則可以不用加后邊那個[1];
其實有個簡單方法,即在chrome的開發者工具中,選中要定位的元素,右鍵選擇copy Xpath就可以獲取到其xpath,只是有時候這個xpath會很長…所以建議還是自己寫比較好;
以上那5中方法是可以靈活配合使用的。
8、通過css選擇器查找
與通過xpath查找類似,這個也可以直接在chrome中點擊要定位的元素右鍵選擇cssSelector來獲取其css選擇器,不過和xpath一樣有時候會很長…不如自己寫的簡單(需要注意的是css選擇器方式有時候寫起來比xpath要簡單許多,建議這個好好學習下);
這部分詳細教程可以參考這個鏈接:http://www.w3school.com.cn/cssref/css_selectors.asp
========================================================================================================================
下面簡單講下常用方法:
(1)、通過id方式
這里的selector可以寫為#id_value或者帶tag名稱的方式tag_name#id_value,其中tag_name為類似div這種,id_value則是該元素的id屬性的值;
(2)、通過class方式
此處selector可以寫為.class_value或者帶tag名稱的方式tag_name.class_value,此處的class_value為元素的class屬性的value值;
(3)、通過其他屬性的方式
此處selector可以寫為[attr_name="attr_value"]或者[attr_name='attr_value'],此種方式也可以帶個tag名稱,直接加在中括號前面即可;
(4)、通過tag_name的方式
此處selector寫法為tag_name,這樣可以直接獲取到所有標簽名為tag_name的元素,結果同tagName查找方式;
(5)、通過路徑方式
此處selector寫法為tag_name>tag_name,當然tag_name可以帶屬性,路徑可以有多層;
如上幾種方式可以配合使用;
===============================================================================================================
三、元素的基本操作
1、點擊
代碼為element.click(),此操作用於所有可以點擊的操作,注意不能點擊的元素用click操作會拋異常;
2、清除
代碼為element.clear(),此操作用於input輸入框,在輸入字符串之前建議先clear下,以避免有數據導致內容輸入異常;
3、發送數據
代碼為element.sendKeys(keys),此操作用於input輸入框;
4、提交數據
代碼為element.submit(),此操作常用於form元素塊兒的提交按鈕,一般和發送數據配合使用,登錄框比較常見;
5、獲取屬性
代碼為element.getAttribute(attr_key),用於獲取元素的屬性值,attr_key為屬性的key值;
6、獲取css值
代碼為element.getCssValue(css_key),用於獲取元素的某個css值,css_key為css屬性名稱;
7、獲取位置
代碼為element.getLocation(),用於獲取元素的位置信息,即該元素左上角在整個瀏覽器中的坐標;
8、獲取大小
代碼為element.getSize(),用於獲取元素的大小信息,即該元素的長和寬信息,常用於元素截圖,和獲取位置配合使用,可以獲取元素塊兒其他三個點的坐標;
9、獲取tag_name
代碼為element.getTagName();,用於獲取元素的tag名稱;
10、獲取內容
代碼為element.getText(),用於獲取元素的text的值;
11、查找元素
代碼為element.findElement(By),用於根據以該元素為原點獲取元素,此處不太常用;
12、是否顯示
代碼為element.isDisplayed(),返回該元素是否顯示,對應元素的這個屬性style="display: block;";
13、是否enable
代碼為element.isEnable(),常用於單選框等;
14、是否被選擇
代碼為element.isSelected(),此項用於select元素塊兒。