软件测试培训
美国上市软件测试培训机构

400-111-8989

热门课程

定位页面元素--Selenium自动化(六)

  • 时间:2016-08-08
  • 发布:软件测试培训
  • 来源:软件测试教程

Selenium-Webdriver提供了强大的元素定位方法,支持以下三种方法。

n 单个对象的定位方法

n 多个对象的定位方法

n 层级定位

1. 定位单个元素

在定位单个元素时,selenium-webdriver 提示了如下一些方法对元素进行定位。下面这些定位方式中,优先使用id、name、classname,对于网上的链接元素,推荐使用linkText定位方式,对于不好定位的元素,考虑使用火狐的插件去辅助定位(xpath)。

By.className(className)) //对于元素的属性包含class的情况适用

By.cssSelector(selector) //通用定位方式,对于不好定位的元素适用

By.id(id) //对于元素的属性包含id的情况适用,推荐使用

By.linkText(linkText) //适用于链接类的元素,即标签,包含herf属性的元素

By.name(name) //对于元素的属性包含name的情况适用

By.partialLinkText(linkText) //适用于链接类的元素,模糊匹配,即包含herf属性的元素

By.tagName(name) //通用定位方式,适用于层级定位

By.xpath(xpathExpression) //通用定位方式,对于不好定位的元素适用,兼容性存在问题

注意:selenium-webdriver 通过findElement()、findElements()等find 方法调用"By"对象来定位和查询元素。By 类只是提供查询的方式进行分类。findElement 返回一个元素对象否则抛出异常,findElements 返回符合条件的元素List,如果不存在符合条件的就返回一个空的list。

小技巧(处理复合classname的方法)

classname

上述元素的class为bg s_btn,中间有空格的即为复合型class,此时直接按By.className("bg s_btn"),则会报错Compound class names are not supported. Consider searching for one class name and filtering the results or use CSS selectors.

处理方法为只选择class属性中的一个值,下面的代码就不会报错了

driver.findElement(By.className("s_btn"));

2. 定位多个元素

findElements()方法可以返回一个符合条件的元素List组

这是一个定位多个元素并从中选择一个成员进行操作的例子

//定义了一个集合,将name一样的元素一次性定位出来

List elements = driver .findElements(By.name("flag"));

//通过集合的下标进行操作,集合的第一位下标是0,参数index就是下标

elements.get(index).click();

3. 层级定位

层级定位的思想是先定位父元素,然后再从父元素中精确定位出其我们需要选取的子元素。层级定位一般的应用场景是无法直接定位到需要选取的元素,但是其父元素比较容易定位,通过定位父元素再遍历其子元素选择需要的目标元素,或者需要定位某个元素下所有的子元素。

表格应用

//得到table元素对象

WebElement table = driver.findElement(by);

//得到table表中所有行对象,并得到所要查询的行对象。

List rows = table.findElements(By.tagName("tr"));

下拉列表应用

//读取下拉列表中选项的个数

WebElement a = driver.findElement(By.id("areaID")); //定位下拉列表

List aa = a.findElements(By.tagName("option")); //从下拉列表中查找所有的选项

上一篇:操作浏览器--Selenium自动化(五)
下一篇:页面元素操作之一--Selenium自动化(七)

数据驱动之sqlite--Selenium自动化(二十一)

数据驱动之csv--Selenium自动化(二十)

数据驱动之properties--Selenium自动化(十九)

Page Object改进--Selenium自动化(十八)

选择城市和中心
贵州省

广西省

海南省