1.簡介
按計劃今天巨集哥繼續講解倚天劍-css的定位元素的方法:ID屬性值定位、其他屬性值定位和使用屬性值的一部分定位(這個類似xpath的模糊定位)。
2.常用定位方法(8種)
(1)id
(2)name
(3)class name
(4)tag name
(5)link text
(6)partial link text
(7)xpath
(8)css selector(今天講解)
3.自動測試實戰
以百度首頁為例,將CSS的各種定位方法一一講解和分享一下。
3.1大致步驟
1.訪問度娘首頁。
2.通過CSS定位到元素,點選一下。
3.2使用ID屬性值定位元素
使用ID屬性值定位元素,以‘標籤’開頭,先指定一個 HTML 標籤,然後加上一個“#”符號,跟上 id 的屬性值。具體格式為:
xxx.By.cssSelector("標籤#ID屬性值")
具體例子:
xxx.By.cssSelector("input#btn")
具體步驟:
在被測試百度網頁中,按照巨集哥在5.2中的方法 (1)查詢輸入框並輸入“北京巨集哥”,(2)查詢“百度一下”按鈕,(3)點選“百度一下”按鈕。
CSS表示式:
(1)input#kw
(2)input#su
java定位語句:
(1)WebElement SearchBox = driver.findElement(By.cssSelector( "input#kw" ));
(2)WebElement SearchButton = driver.findElement(By.cssSelector("input#su"));
3.2.1程式碼設計
3.2.1參考程式碼
package lessons; import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; /** * @author 北京-巨集哥 * * 《手把手教你》系列技巧篇(十七)-java+ selenium自動化測試-元素定位大法之By css中卷(詳細教程) * * 2021年8月12日 */ public class ByCss { public static void main(String [] args) throws InterruptedException { System.setProperty("webdriver.gecko.driver", ".\\Tools\\chromedriver.exe"); //指定驅動路徑 WebDriver driver = new ChromeDriver (); //最大化視窗 driver.manage().window().maximize(); driver.get("http://wwww.baidu.com"); //By css 定位 WebElement SearchBox = driver.findElement(By.cssSelector( "input#kw" )); SearchBox.sendKeys("北京巨集哥"); WebElement HotButton = driver.findElement(By.cssSelector("input#su")); HotButton.click(); //定位到文字,將文字高亮顯示 //建立一個JavascriptExecutor物件 JavascriptExecutor js =(JavascriptExecutor)driver; //新聞文字高亮顯示顏色 js.executeScript ( "arguments[0].setAttribute('style', arguments[1]);",SearchBox,"background: orange; border: 2px solid red;"); Thread.sleep (5000); //判斷開啟頁面是不是北京巨集哥,這裡用url作為驗證 assert driver.getCurrentUrl() == "https://www.baidu.com/s?wd=%E5%8C%97%E4%BA%AC%E5%AE%8F%E5%93%A5&rsv_spt=1&rsv_iqid=0x8a46c2c2000000cd&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=8&rsv_sug1=12&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=4982&rsv_sug4=4982"; System.out.println("斷言通過!"); driver.quit(); } }
3.2.1執行程式碼
1.執行程式碼,右鍵Run AS->java Application,控制檯輸出,如下圖所示:
2.執行程式碼後電腦端的瀏覽器的動作,如下小視訊所示:
3.3使用頁面其他屬性值定位元素
使用頁面其他屬性值定位元素,以‘標籤’開頭,具體格式為:
xxx.By.cssSelector("標籤[屬性=屬性值]")
具體例子:
xxx.By.cssSelector("input[password=password]")
除了 class 和 id 屬性,CSS 選擇器也可以使用其他的元素屬性來定位。例如使用<input>中的 Name 屬性。
WebElement userName =driver.findElement(By.cssSelector("input[name=username]"));
alt 屬性來定位<img>元素。
WebElement previousButton =driver.findElement(By.cssSelector("img[alt='Previous']"));
你可能會遇到一個屬性不足以來定位到一個元素的情況,你需要聯合使用其他的屬性來達到精確匹配。下面的例子中,使用多個屬性來定位<input>元素。
WebElement previousButton =driver.findElement(By.cssSelector("input[type='submit'][value='Login']"));
具體步驟:
在被測試百度網頁中,按照巨集哥在5.2中的方法 (1)查詢輸入框並輸入“北京巨集哥”,(2)查詢“百度一下”按鈕,(3)點選“百度一下”按鈕。
CSS表示式:
(1)input[name=wd]
(2)input[value=百度一下]
java定位語句:
(1)WebElement SearchBox = driver.findElement(By.cssSelector( "input[name=wd]" ));
(2)WebElement SearchButton = driver.findElement(By.cssSelector("input[value=百度一下]"));
3.3.1程式碼設計
3.3.1參考程式碼
package lessons; import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; /** * @author 北京-巨集哥 * * 《手把手教你》系列技巧篇(十七)-java+ selenium自動化測試-元素定位大法之By css中卷(詳細教程) * * 2021年8月10日 */ public class ByCss { public static void main(String [] args) throws InterruptedException { System.setProperty("webdriver.gecko.driver", ".\\Tools\\chromedriver.exe"); //指定驅動路徑 WebDriver driver = new ChromeDriver (); //最大化視窗 driver.manage().window().maximize(); driver.get("http://wwww.baidu.com"); //By css 定位 WebElement SearchBox = driver.findElement(By.cssSelector( "input[name=wd]" )); SearchBox.sendKeys("北京巨集哥"); WebElement HotButton = driver.findElement(By.cssSelector("input[value=百度一下]")); HotButton.click(); //定位到文字,將文字高亮顯示 //建立一個JavascriptExecutor物件 JavascriptExecutor js =(JavascriptExecutor)driver; //新聞文字高亮顯示顏色 js.executeScript ( "arguments[0].setAttribute('style', arguments[1]);",SearchBox,"background: orange; border: 2px solid red;"); Thread.sleep (5000); //判斷開啟頁面是不是北京巨集哥,這裡用url作為驗證 assert driver.getCurrentUrl() == "https://www.baidu.com/s?wd=%E5%8C%97%E4%BA%AC%E5%AE%8F%E5%93%A5&rsv_spt=1&rsv_iqid=0x8a46c2c2000000cd&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=8&rsv_sug1=12&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=4982&rsv_sug4=4982"; System.out.println("斷言通過!"); driver.quit(); } }
3.3.1執行程式碼
1.執行程式碼,右鍵Run AS->java Application,控制檯輸出,如下圖所示:
2.執行程式碼後電腦端的瀏覽器的動作,如下小視訊所示:
3.4使用屬性值的一部分內容定位元素
此方法巨集哥感覺和前邊介紹的模糊定位差不多,具體語法和例子以及描述,如下表所示:
語法 |
例子 |
描述 |
^= |
input[id^= ' ctrl'] |
以 XXX 開始,例如,如果一個元素的ID是ctrl_12,就可以定位到此元素,匹配到 id 的頭部 ctrl |
$= |
input[id$='_username'] |
以 XXX 結尾,例如,如果一個元素的 ID 是a_1_userName,返將會匹配到 id 的尾部_userName。 |
*= |
input[id*='username'] |
包含。例如,如果一個元素的 ID 是 panel_login_userName_textfield,返將會匹配到此 id 值的_userName,從而定位到元素 |
具體步驟:
在被測試百度網頁中,按照巨集哥在5.2中的方法 (1)查詢輸入框並輸入“北京巨集哥”,(2)查詢“百度一下”按鈕,(3)點選“百度一下”按鈕。
CSS表示式:
(1)input[id ^= 'k']
(2)input[id *='su']
java定位語句:
(1)WebElement SearchBox = driver.findElement(By.cssSelector( "input[id ^= 'k'] " ));
(2)WebElement SearchButton = driver.findElement(By.cssSelector("input[id *='su']"));
3.3.1程式碼設計
3.3.1參考程式碼
package lessons; import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; /** * @author 北京-巨集哥 * * 《手把手教你》系列技巧篇(十七)-java+ selenium自動化測試-元素定位大法之By css中卷(詳細教程) * * 2021年8月10日 */ public class ByCss { public static void main(String [] args) throws InterruptedException { System.setProperty("webdriver.gecko.driver", ".\\Tools\\chromedriver.exe"); //指定驅動路徑 WebDriver driver = new ChromeDriver (); //最大化視窗 driver.manage().window().maximize(); driver.get("http://wwww.baidu.com"); //By css 定位 WebElement SearchBox = driver.findElement(By.cssSelector( "input[id^='k']" )); SearchBox.sendKeys("北京巨集哥"); WebElement HotButton = driver.findElement(By.cssSelector("input[id*='su']")); HotButton.click(); //定位到文字,將文字高亮顯示 //建立一個JavascriptExecutor物件 JavascriptExecutor js =(JavascriptExecutor)driver; //新聞文字高亮顯示顏色 js.executeScript ( "arguments[0].setAttribute('style', arguments[1]);",SearchBox,"background: orange; border: 2px solid red;"); Thread.sleep (5000); //判斷開啟頁面是不是北京巨集哥,這裡用url作為驗證 assert driver.getCurrentUrl() == "https://www.baidu.com/s?wd=%E5%8C%97%E4%BA%AC%E5%AE%8F%E5%93%A5&rsv_spt=1&rsv_iqid=0x8a46c2c2000000cd&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=8&rsv_sug1=12&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=4982&rsv_sug4=4982"; System.out.println("斷言通過!"); driver.quit(); } }
3.3.1執行程式碼
1.執行程式碼,右鍵Run AS->java Application,控制檯輸出,如下圖所示:
2.執行程式碼後電腦端的瀏覽器的動作,如下小視訊所示:
4.小結
這篇文章中的第一和第二種方法其實就是用:標籤和屬性組合進行定位的,那麼單單用屬性可以定位嗎?巨集哥試一下。
4.1屬性定位
可以通過元素的id,class,tag標籤這三個屬性直接定位
(1)# 表示id屬性,如:#kw
(2). 表示class屬性,如:.s_ipt
(3)直接用標籤名稱,如:input
4.1.1參考程式碼
package lessons; import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; /** * @author 北京-巨集哥 * * 《手把手教你》系列技巧篇(十七)-java+ selenium自動化測試-元素定位大法之By css中卷(詳細教程) * * 2021年8月12日 */ public class ByCss { public static void main(String [] args) throws InterruptedException { System.setProperty("webdriver.gecko.driver", ".\\Tools\\chromedriver.exe"); //指定驅動路徑 WebDriver driver = new ChromeDriver (); //最大化視窗 driver.manage().window().maximize(); driver.get("http://wwww.baidu.com"); //By css class定位 WebElement SearchBox = driver.findElement(By.cssSelector( ".s_ipt" )); SearchBox.sendKeys("北京巨集哥"); //By css id定位 WebElement HotButton = driver.findElement(By.cssSelector("#su")); HotButton.click(); //定位到文字,將文字高亮顯示 //建立一個JavascriptExecutor物件 JavascriptExecutor js =(JavascriptExecutor)driver; //新聞文字高亮顯示顏色 js.executeScript ( "arguments[0].setAttribute('style', arguments[1]);",SearchBox,"background: orange; border: 2px solid red;"); Thread.sleep (5000); //判斷開啟頁面是不是北京巨集哥,這裡用url作為驗證 assert driver.getCurrentUrl() == "https://www.baidu.com/s?wd=%E5%8C%97%E4%BA%AC%E5%AE%8F%E5%93%A5&rsv_spt=1&rsv_iqid=0x8a46c2c2000000cd&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=8&rsv_sug1=12&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=4982&rsv_sug4=4982"; System.out.println("斷言通過!"); driver.quit(); } }
4.2其它屬性定位
通過其它屬性定位時,直接寫屬性名和屬性值
4.2.1參考程式碼
package lessons; import org.openqa.selenium.By; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.chrome.ChromeDriver; /** * @author 北京-巨集哥 * * 《手把手教你》系列技巧篇(十七)-java+ selenium自動化測試-元素定位大法之By css中卷(詳細教程) * * 2021年8月12日 */ public class ByCss { public static void main(String [] args) throws InterruptedException { System.setProperty("webdriver.gecko.driver", ".\\Tools\\chromedriver.exe"); //指定驅動路徑 WebDriver driver = new ChromeDriver (); //最大化視窗 driver.manage().window().maximize(); driver.get("http://wwww.baidu.com"); //By css class定位 WebElement SearchBox = driver.findElement(By.cssSelector( "[name='wd']" )); SearchBox.sendKeys("北京巨集哥"); //By css id定位 WebElement HotButton = driver.findElement(By.cssSelector("[value='百度一下']")); HotButton.click(); //定位到文字,將文字高亮顯示 //建立一個JavascriptExecutor物件 JavascriptExecutor js =(JavascriptExecutor)driver; //新聞文字高亮顯示顏色 js.executeScript ( "arguments[0].setAttribute('style', arguments[1]);",SearchBox,"background: orange; border: 2px solid red;"); Thread.sleep (5000); //判斷開啟頁面是不是北京巨集哥,這裡用url作為驗證 assert driver.getCurrentUrl() == "https://www.baidu.com/s?wd=%E5%8C%97%E4%BA%AC%E5%AE%8F%E5%93%A5&rsv_spt=1&rsv_iqid=0x8a46c2c2000000cd&issp=1&f=8&rsv_bp=1&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_dl=tb&rsv_sug3=8&rsv_sug1=12&rsv_sug7=100&rsv_sug2=0&rsv_btype=i&inputT=4982&rsv_sug4=4982"; System.out.println("斷言通過!"); driver.quit(); } }
以上程式碼巨集哥都執行了,可以正常執行和定位。好了今天時間也不早了就分享到這裡吧!