1. 程式人生 > >selenium元素定位大全

selenium元素定位大全

alt ddd 進行 type http find bdd 技術 其他

要做自動化,首先要了解頁面結構,要了解頁面結構,就要了解頁面元素的定位方法 在使用selenium webdriver進行元素定位時,通常使用findElement或findElements方法結合By類返回的元素句柄來定位元素。 常用的元素定位方法如下: 技術分享 如何選擇 定位方法   策略是:選擇簡單,穩定的定位方法。   1. 當頁面元素有id屬性的時候, 盡量使用id來定位。 沒有的話,再選擇其他定位方法   2. cssSelector 執行速度快, 推薦使用   3. 定位超鏈接的時候,可以考慮linkText或partialLinkText:但是要註意的是 , 文本經常發生改變, 所以不推薦用   4. xpath 功能最強悍。 但是執行速度慢,因為需要查找整個頁面元素, 所以盡量少用。 實在沒有辦法的時候,才使用xpath 部分定位詳解,因為其他都比較簡單 1、By.tagName()   通過tagName來搜索元素的時候,會返回多個元素. 因此需要使用findElements()   WebDriver driver = new FirefoxDriver();   driver.get("http://www.cnblogs.com");   List<WebElement> buttons = driver.findElements(By.tagName("div"));   System.out.println("Button:" + buttons.size()); 註意: 如果使用tagName, 要註意很多HTML元素的tagName是相同的,   比如單選框,復選框, 文本框,密碼框.這些元素標簽都是input. 此時單靠tagName無法精確獲取我們想要的元素, 還需要結合type屬性,才能過濾出我們要的元素   WebDriver driver = new FirefoxDriver();   driver.get("http://www.cnblogs.com");   List<WebElement> buttons = driver.findElements(By.tagName("input"));   for (WebElement webElement : buttons) {     if (webElement.getAttribute("type").equals("text")) {       System.out.println("input text is :" + webElement.getText());     }   } 2、Xpath定位 2.1.什麽是xpath:xpath 是XML Path的簡稱, 由於HTML文檔本身就是一個標準的XML頁面,所以我們可以使用Xpath 的用法來定位頁面元素。   2.2.xpath定位的缺點 xpath 這種定位方式, webdriver會將整個頁面的所有元素進行掃描以定位我們所需要的元素, 這是個非常費時的操作, 如果腳本中大量使用xpath做元素定位的話, 腳本的執行速度可能會稍慢   例如 testXpath.html 代碼如下   <html>   <head><title>Test Xpath</title></head>     <body>         <div id="div1">         <input name="div1input"></input>           <a href="http://www.sogou.com">搜狗搜索</a>           <img alt="div1-img1" src="http://www.sogou.com/images/logo/new/sogou.png" href="http://www.sogou.com">搜狗圖片</img>         <input type="button" value="查詢"></input>         </div>           <br />             <div name="div2">               <input name="div2iniput" /></input>               <a href="http://www.baidu.com">百度搜索</a>               <img alt="div2-img2" src="http://www.baidu.comn/img/bdlogo.png" href="http:/www.baidu.com">百度圖片</img>         </div>       </body>     </html>   絕對路徑定位方式     在被測試網頁中, 查找第一個div標簽中的按鈕     XPath的表達式:/html/body/div/input[@value="查詢"]       WebElement button = driver.findElement(By.xpath("/html/body/div/input[@value=‘查詢‘]"));   絕對路徑的缺點     1. 一旦頁面結構發生改變,改路徑也隨之失效,必須重新。 所以不推薦使用絕對路徑的寫法   絕對路徑和相對路徑的區別     絕對路徑 以 "/" 開頭, 讓xpath 從文檔的根節點開始解析     相對路徑 以"//" 開頭, 讓xpath 從文檔的任何元素節點開始解析     相對路徑定位方式     在被測試網頁中,查找第一個div標簽中的按鈕     XPath的表達式://input[@value="查詢"]       WebElement button = driver.findElement(By.xpath("//input[@value=‘查詢‘]")); 3、表格定位   技術分享
舉例1:   driver.navigate().to("http://www.w3school.com.cn/html/html_tables.asp");     //獲取所有的tr集合     List<WebElement> rows=driver.findElements(By.className("dataintable"));       //驗證表格的行數       // assertEquals(11, rows.size());       //打印出所有單元格的數據     for(WebElement row : rows){       //等到當前tr裏的td集合       List<WebElement> cols=driver.findElements(By.tagName("td"));         for(WebElement col : cols){            System.out.println(col.getText()); //得到td裏面的文本         }         System.out.println();     } 舉例2: 思路:層級定位,先定位table,在定位tr,在定位td String url="table的地址"; driver.get(url); String str="第一行第一列"; String str1="第三行第一列"; WebElement Table = driver.findElement(By.tagName("table")); //java裏打印元素類型 Sydtem.out.print(driver.findElement(By.tagName("table")).getClass()); //table有那麽多行,定位在哪一行呢?--》默認都是第一行 // 所以就不能用 Table.findElement(By.tagName("tr")),findElement是定位單一的一個元素的方法,定位一組用findElements // Table.findElement(By.tagName("tr"));//這種方式取到的是一個數組,就不是一個對象了,所以以下方法是正確的 List < WebElement> rows = Table.findElements(By.tagName("tr")); for( WebElement row : rows){ List <WebElement> tds = row.findElements(By.tagName("td")); for( WebElement td : tds){ // System.out.print(td.getText()+"\n"); //取出所有元素 String value=td.getText(); // if(value==str){ 為什麽不能用= =,因為value是一個對象 if(value.equals(str) || value.equal(str1)){ System.out.print(value+"\n"); }else{ System.out.print("error"+"\n"); } } }

selenium元素定位大全