selenium webdriver常用的網頁元素定位方法

selenium webdriver進行元素定位
seleniumAPI官方API地址:https://seleniumhq.github.io/selenium/docs/api/java/index.html
提示:獲取網頁的指定的元素,將鼠標移至需要查看元素的位置,右擊選擇【檢查】(Chrome瀏覽器),就能查看到指定位置的元素
通常使用findElement或findElements方法結合By類返回的元素句柄來定位元素,我這裏列舉常見的方法:

一、By.Id()

在HTML中,id屬性是唯一標識一個元素的屬性。selenium中,id被作爲首選的識別屬性,因爲這是最快的識別策略。
以百度主頁爲例,搜索框的HTML示例代碼如下,其id爲kw;
在這裏插入圖片描述
【百度一下】按鈕的id是"su"
在這裏插入圖片描述
在WebDriver中通過ID查找元素的java示例代碼如下:

  import org.openqa.selenium.By;
  import org.openqa.selenium.WebDriver;
  import org.openqa.selenium.chrome.ChromeDriver;
  import org.testng.annotations.Test;
  public class selenium{
      @Test
      public void test() {
          WebDriver driver = new ChromeDriver();                     //打開chrome瀏覽器
          driver.get("http://www.baidu.com");                        //輸入網址
         driver.findElement(By.id("kw")).sendKeys("selenium");      //搜索框輸入"selenium"
         driver.findElement(By.id("su")).click();                   //點擊百度一下,進行搜索
         driver.quit();                                             //關閉瀏覽器
     }
 }

二、By.Name()

在HTML中,name屬性和ID屬性功能基本相同,只是name屬性不一定是唯一的。在selenium中,如果沒有ID的話,首先考慮的就是name屬性。
沿用上圖,搜索框的name是"wd"
在WebDriver中通過Name查找元素的部分java示例代碼如下:

         driver.get("http://www.douban.com");                       //輸入網址
         WebElement serch=driver.findElement(By.name("q"));         //生成WebElement實例對象serch
         serch.sendKeys("selenium");     //搜索框輸入"selenium"
         serch.submit();                                            //進行搜索

注意:Click方法只適用於button,submit可以用於提交表單

三、By.Xpath()

XPath是XML Path的簡稱,由於HTML文檔本身就是一個標準的XML頁面,所以我們可以使用XPath的語法來定位頁面元素。
這個方法是非常強大的元素查找方式,使用這種方法幾乎可以定位到頁面上的任意元素。
Xpath通過路徑來定位控件,分爲絕對路徑和相對路徑。絕對路徑以單/號表示,相對路徑則以//表示。當xpath的路徑以/開頭時,表示讓Xpath解析引擎從文檔的根節點開始解析。當xpath路徑以//開頭時,則表示讓xpath引擎從文檔的任意符合的元素節點開始進行解析。而當/出現在xpath路徑中時,則表示尋找父節點的直接子節點,當//出現在xpath路徑中時,表示尋找父節點下任意符合條件的子節點。
以下面HTML代碼爲例

<html>
 <body>
  <form id="login">
   <input name="name" type="text" />
   <input name="password" type="password" />
   <input name="aa" type="button" value="clear" />
  </form>
 </body>
</html>

要引用對應的對象,XPath語法如下:
(1)絕對路徑寫法(只有一種),寫法如下:
引用頁面上的form元素(即源碼中的第3行):/html/body/form
(2)相對路徑的引用寫法:
查找頁面根元素://
查找頁面上所有的input元素://input
查找頁面上第一個form元素內的直接子input元素(即只包括form元素的下一級input元素)://form/input
查找頁面上第一個form元素內的所有子input元素(只要在form元素內的input都算,不管還嵌套了多少個其他標籤,使用相對路徑表示,雙//號)://form//input
查找頁面上第一個form元素://form
查找頁面上id爲login的form元素://form[@id=‘login’]
查找頁面上具有name屬性爲name的input元素://input[@name=‘name’]
查找頁面上id爲login的form元素下的第一個input元素://form[@id=‘login’]/input[1]
查找頁面具有name屬性爲aa並且type屬性爲button的input元素://input[@name=‘aa’][@type=‘button’]
查找頁面上id爲login的form元素下第2個input元素://form[@id=‘login’]/input[2]
以百度主頁爲例,上圖所示,搜索框的xpath爲//*[@id=’'kw]。
在WebDriver中通過Xpath查找元素的java示例代碼如下:

  import org.openqa.selenium.By;
  import org.openqa.selenium.WebDriver;
  import org.openqa.selenium.WebElement;
  import org.openqa.selenium.chrome.ChromeDriver;
  import org.testng.annotations.Test;
  public class selenium{
      @Test
      public void test() {
          WebDriver driver = new ChromeDriver();                            //打開chrome瀏覽器
         driver.get("http://www.baidu.com");                              //輸入網址
         WebElement serch=driver.findElement(By.xpath("//*[@id='kw'"));    //生成WebElement實例對象serch
         serch.sendKeys("selenium");   //搜索框輸入"selenium"
         serch.submit();                                                 //進行搜索
         driver.quit();                                                  //關閉瀏覽器
     }
 }

四、By.linkText()

這個方法比較直接,即通過超文本鏈接上的文字信息來定位元素,這種方式一般專門用於定位頁面上的超文本鏈接。
在這裏插入圖片描述
通過linkTest方式的部分java代碼如下:

  WebElement a=  driver.findElement(By.linkText("新聞"));
  a.click();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章