51Testing软件测试论坛

标题: 【转帖】WebDriver拾级而上(03) – 定位页面元素 [打印本页]

作者: 悠悠小仙仙    时间: 2017-7-13 13:22
标题: 【转帖】WebDriver拾级而上(03) – 定位页面元素
本帖最后由 悠悠小仙仙 于 2017-7-13 13:26 编辑

selenium-webdriver提供了强大的元素定位方法,支持以下三种方法:
单个对象的定位方法多个对象的定位方法层级定位
注意:
selenium-webdriver通过findElement()\findElements()等find方法调用”By”对象来定位和查询元素。By类只是提供查询的方式进行分类。findElement返回一个元素对象否则抛出异常,findElements返回符合条件的元素 List,如果不存在符合条件的就返回一个空的list。
一、定位单个元素A.使用className进行定位
当所定位的元素具有class属性的时候我们可以通过classname来定位该元素。
例:下面的例子定位页面上class为”username”的li。
CODE:
  1. WebElement element = driver.findElement(By.className("username"));
  2. System.out.println(element.getTagName());
复制代码
输出结果:Li
B.使用id属性定位
例:
CODE:
<input id="passport_user" type="text" value="" title="用户名/邮箱" name="passport_user">
CODE:
  1. WebElement element = dr.findElement(By.id("passport_user"));
  2. System.out.println(element.getAttribute("title"));
复制代码
输出结果:用户名/邮箱
C.使用name属性定位
例:
CODE:
  1. <input id="passport_user" type="text" value="" title="用户名/邮箱" name="passport_user">
复制代码
CODE:
  1. WebElement e = dr.findElement(By.name("passport_user"));
复制代码
D.使用css属性定位
例:
CODE:
  1. <input id="passport_user" type="text" value="" title="用户名/邮箱" name="passport_user">
复制代码
CODE:
  1. WebElement e1 = dr.findElement(By.cssSelector("#passport_user"));
复制代码
详解:
1.css之后代选择器CODE:
  1. <p>
  2.     <em>location1</em>
  3. </p>
  4. <ol>
  5.      <li><em>location2</em></li>
  6. </ol>
复制代码
可以通过css=p em这个可以选中文本为location1的em元素
css=ol em这个可以选中文本为location2的em元素
css后代选择器和xpath中//div//a一样:取得所有div下面所有的a节点。这个是忽略了父子节点CODE:
  1. <div>
  2.     <p><em>location1</em></p>
  3. </div>
  4. <div>
  5. <ol>
  6.     <li><strong><em>location2</em></strong></li>
  7.     <li><em>location3</em></li>
  8.     <li><em>location4</em></li>
  9. </ol>
  10. </div>
复制代码
可以通过css=p>em来定位location1
css之父子节点选择器给后代选择器加了一个限制,类似xpath中//div/p/em:所有div下的子元素p的子元素em。
css=li+li em来定位location3,location4的em
css=li+strong+em来定位文本为location2的em
2.css之id选择器
CODE:
  1. <input id="location1" type="button"/>
  2. <input id="location2" type="radio"/>
复制代码
通过css=#location1来定位type为button的按钮
通过css=#location2来定位type为radio的单选框
3.css之类选择器
CODE:
  1. <input class="location1" type="button" value="确定"/>
  2. <input class="location2" type="button" value="取消"/>
复制代码
通过css=input.location1来选择value值为确定的按钮
通过css=input.location2来选择value值为取消的按钮
4.css之属性选择器
CODE:
  1. <input class="location1" type="button" value="确定"/>
  2. <input class="location2" type="button" />
复制代码
通过css=[class=location1]可以定位第一个按钮
通过css=[class~=1]可以定位第一个按钮
通过css=[value=”确定”]可以定位第一个按钮
通过css=input[class=”location”]可以定位第二个按钮
E.按标记(tag)名称查找
元素的DOM标记名称
CODE:
  1. <iframe src="..."></iframe>
复制代码
CODE:
作者: 八戒你干嘛    时间: 2017-7-13 17:03
页面元素一直定位不出,这样可以回去试试了




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2