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元素内的直接子xxx元素(即只包括form元素的下一级xxx元素)://form/xxx
查找页面上第一个form元素内的所有子xxx元素(只要在form元素内的xxx都算,不管还嵌套了多少个其他标签,使用相对路径表示,双//号)://form//xxx
查找页面上第一个form元素://form
查找页面上id为xxxxx的form元素://form[@id=‘xxxxx’]
查找页面上具有name属性为xxxxxx的input元素://input[@name=‘xxxxxx’]
查找页面上id为xxxxx的form元素下第2个input元素://form[@id=‘xxxxx’]/input[2]
查找页面具有name属性为aa并且type属性为button的input元素://input[@name=‘aa’][@type=‘button’]
以百度主页为例,上图所示,搜索框的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();