页面元素的定位方法

Webdriver提供了findElement和findElements函数进行单个元素和一组元素的定位

定位方法 定位方法的Java语言实现实例
id定位 Driver.findElement(By.id(“属性id的值”));
name定位 Driver.findElement(By.name(“属性name的值”));
link的全文字定位 Driver.findElement(By.linkText(“链接的全部文字内容”));
link部分文字定位 Driver.findElement(By.partialLinkText(“链接的部分文字内容”));
标签名定位 Driver.findElement(By.tagName(“页面中的HTML标签名称”));
class名称定位 Driver.findElement(By.className(“页面中的Class标签名称”));
xpath方式定位 Driver.findElement(By.xpath(“Xpath定位表达式”));
css方式定位 Driver.findElement(By.cssSelector(“Css定位表达式”));
jQuery定位 js.executeScript(“return jQurey.find(‘jQurey定位表达式’)”);

使用ID定位

HTML的id属性是挡墙网页中的唯一,使用ID值定位可以保证定位的唯一性。

被测试网页HTML代码:

1
2
3
4
5
6
7
8
9
10
<html>
<body>
<label>用户名</label>
<input id="username" />
<label>密码</label>
<input id="password" />
<br>
<button id="submit">登录</button>
</body>
</html>

定位语句代码:

1
2
3
WebElement username = driver.findElement(By.id("username"));
WebElement password = driver.findElement(By.id("password"));
WebElement submit = driver.findElement(By.id("submit"));

使用name定位

HTML的name属性在档期啊网页中可以不是唯一的,使用name定位可能会同时定位到多个元素。

被测试网页HTML代码:

1
2
3
4
5
6
7
8
9
10
<html>
<body>
<label>用户名</label>
<input name="username" />
<label>密码</label>
<input name="password" />
<br>
<button name="submit">登录</button>
</body>
</html>

定位语句代码:

1
2
3
WebElement username = driver.findElement(By.name("username"));
WebElement password = driver.findElement(By.name("password"));
WebElement submit = driver.findElement(By.name("submit"));

使用链接的全部文字定位

使用此方式定位链接需要完全匹配链接显示文件,常用于页面中多个链接文字高度相似的情况,且无法使用部分链接文字进行定位。

被测试网页HTML代码:

1
2
3
4
5
6
<html>
<body>
<a href="http://www.baidu.com">百度搜索</a><br>
<a href="http://www.sogou.com">搜狗搜索</a>
</body>
</html>

定位语句代码:

1
WebElement link = driver.findElement(By.linkText("百度搜索"));

使用部分链接的文字定位

执行js脚本

  • Selenium能够执行js,这使得Selenium拥有更为强大的能力。既然能执行js,那么js做的事,Selenium应该大部分也能做
  • 直接使用js操作页面,能解决很多click()不生效的问题
  • 页面滚动到底部/顶部
  • 处理富文本框,时间控件的输入

Selenium如何调用js

selenium提供了js的一个api

1
2
3
4
5
JavascriptExecutor javascriptExecutor = (JavascriptExecutor) driver;
javascriptExecutor.executeScript("window.alert(\"弹窗\")");
javascriptExecutor.executeScript("a=document.getElementById(\"kw\").value;window.alert(a)");
// 返回
javascriptExecutor.executeScript("return document.getElementById('kw').value");
  • executeScript:执行js

js处理案件–时间控件

  • 大部分时间控件都是readonly属性,需要手动去选择对应的时间,手工测试中很容易做到,自动化中对控件的操作可以使用js来操作。
  • 处理时间控件思路:
    • 要取消日期的readonly属性
    • value赋值
    • webdriver对js进行处理

元素定位小工具

ChroPath

Chrome浏览器的插件,需要翻墙安装

Xpath Helper

Chrome浏览器的插件,需要翻墙安装s

xPath Finder

xPath Finder是Firefox火狐浏览器的插件

  1. 点击”附加组件“ ,或浏览器请求地址:about:addons

  2. 查找组件

    image-20201210132523865

  3. 安装组件

    image-20201210132603887

  4. 使用

TryXpath

TryXpath是Firefox火狐浏览器的插件

  1. 安装组件

    image-20201210140541908

  2. 使用

确定元素的唯一性

可以使用Chrome浏览器控制台的进行元素唯一的确认

image-20201211115050062