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();