软件测试培训
达内IT学院
400-996-5531
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的方法)
上述元素的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")); //从下拉列表中查找所有的选项
填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved