上一篇博客总结了WebDriver元素定位的前6种方式,本篇来总结如何使用XPath定位页面元素?
1.什么是XPath?
XPath是XML Path的简称,它是一种用来确定XML文档中某部分位置的语言。由于HTML文档本身就是一个标准的XML页面,所以可以使用xpath在web应用中定位元素。
使用xpath定位页面元素时, WebDriver会将整个页面的所有元素进行扫描以定位我们所需要的元素,如果脚本中大量使用xpath做元素定位的话, 脚本的执行速度可能会慢一些。
xpath定位页面元素的方法如下:
driver.findElement(By.xpath("xpath表达式"));
2.XPath定位页面元素的方式
2.1.利用路径(绝对路径、相对路径)定位
绝对路径 :以 "/" 开头;
相对路径 :以"//" 开头。
案例需求:
- 打开注册A.html,使用绝对路径实现,密码A:123456;
- 使用相对路径实现,手机号码A:18611111111。
Java代码示例如下:
// xpath定位之绝对定位
driver.findElement(By.xpath("/html/body/form/div/fieldset/p[2]/input")).sendKeys("123456");
// xpath定位之相对定位
driver.findElement(By.xpath("//input[@id='telA']")).sendKeys("18611111111");
2.2.利用元素属性定位
利用元素的唯一性,来快速定位元素;
例如://*[@id='telA']
2.3.利用层级与属性相结合定位
如果要找的元素没有属性,但它的父级元素有,此时可以使用层级与属性相结合来定位元素;
例如://*[@id='p1']/input
部分Java代码示例如下:(这个例子不是太好,因为input有id,name等属性,此时我们假如input元素没有属性)
// xpath定位之层级与属性相结合
driver.findElement(By.xpath("//*[@id='p1']/input")).sendKeys("admin");
2.4.利用属性与逻辑相结合定位
解决各个元素之间相同属性的重名问题;
例如://*[@class='login-test' and @name='user']
案例需求:
- 打开xpath.html,自动填写test1:admin;
- 填写完毕后,3秒种后关闭浏览器窗口。
xpath.html的代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Xpath</title>
</head>
<body>
<p id="p1">
<p id="login_user">
<label for="">test1:</label>
<input type="text" name="user" class="login"/>
</p>
</p>
<p id="p2">
<p id="login_user">
<label for="">test2:</label>
<input type="text" name="user" class="login-test"/>
</p>
</p>
<p id="p3">
<p id="login_user">
<label for="">test3:</label>
<input type="text" name="user-test" class="login-test"/>
</p>
</p>
<p id="p4">
<p id="login_user">
<label for="">test4:</label>
<input type="text" name="user-test" class="login"/>
</p>
</p>
</body>
</html>
页面如下:
上图,可以看到test1和test4的class属性的值相同,均为"login",但二者的name属性的值并不相同,此时可以利用属性与逻辑相结合的方式来定位test1元素。
部分Java代码示例如下:
// 指定路径,实例化火狐浏览器
System.setProperty("webdriver.firefox.bin", "F:\\Program Files (x86)\\Mozilla Firefox35\\firefox.exe");
WebDriver driver = new FirefoxDriver();
// 打开xpath.html页面
String url = "D:\\develop\\软件测试\\web自动化练习\\day02\\xpath.html";
driver.get(url);
// 等待2秒,强制等待
Thread.sleep(2000);
// xpath定位之属性与逻辑相结合,test1:admin
driver.findElement(By.xpath("//input[@class='login' and @name='user']")).sendKeys("admin");
// 等待3秒,强制等待
Thread.sleep(3000);
// 关闭浏览器
driver.quit();
2.5.模糊定位(starts-with、contains)
需求1:查找id属性开始位置包含email的元素,并自动填入allan@qq.com
driver.findElement(By.xpath("//*[starts-with(@id,'email')]")).sendKeys("allan@qq.com");
需求2:查找id属性包含el的元素,并自动填入18611111111
driver.findElement(By.xpath("//*[contains(@id,'el')]")).sendKeys("18611111111");
2.6.文本定位(text()函数)
需求:查找文本内容是"电话号码A"的元素,并自动填入18611111111
driver.findElement(By.xpath("//*[text()='电话号码A']")).sendKeys("18611111111");
来源:CSDN
作者:小蝌蚪找玛玛
链接:https://blog.csdn.net/weixin_44679832/article/details/103858117