元素定位需要了解 HTML 基础标签
1.使用 id 定位
driver.findElement(By.id(“id的值”)
2.使用 name 定位
driver.findElement(By.name(“name的值”)
3.使用 链接 定位
driver.findElement(By.linkText(“链接的全部文字”)
driver.findElement(By.partialLinkText(“链接的部分文字”)
4.使用 className 定位(不推荐,通常结果是多个元素,不准确)
driver.findElement(By.className(“class属性”)
5.使用 tagName 定位(不推荐,通常结果是多个元素,不准确)
driver.findElement(By.tagName("input"));
6.使用 css 定位(有学习成本)
//TO-DO
7.定位一组元素
List<WebElement> element = driver.findElements(By.tagName("input"));
8.使用 xpath 定位 (推荐使用xpath,万能定位方式)
WebElement input=driver.findElement(By.xpath("//input[@id=‘kw‘]"));
(1)xpath格式://标签[@属性name=‘属性value‘]
/ :绝对路径,表示下一级,必须严格按照层级关系写(不推荐使用绝对路径)
// :相对路径,表示从整个HTML代码来看,下面的任一元素,没有严格的层级关系
标签:可以用标签,也可以用 * 表任任意;当标签相同时,是一个list,可以使用索引定位,下标从 1 开始,如:WebElement input=driver.findElement(By.xpath("//*[@id=‘kw‘]//input[1]"));
(2)使用 xpath 进行层级定位
方式1:
WebElement input=driver.findElement(By.xpath("//form[@id=‘form‘]//input[@id=‘kw‘]"));
方式2:
WebElement form=driver.findElement(By.xpath("//form[@id=‘form‘]"));
WebElement input=form.findElement(By.xpath("//input[@id=‘kw‘]"));
(3)使用 xpath 进行元素的父子元素定位(某个元素不响应对应的事件,比如input元素同级的span等等纯文本元素,不响应点击,这时可以去找它的父子兄弟元素)
选取当前节点的所有先辈元素中的一个: //a[@id=‘kw‘]/ancestor::a[@id=‘xx‘] ;
选取当前节点的父节点:parent
选取当前节点的所有子元素:child
选取当前节点的所有后代元素(子、孙等):descendant
选取文档中当前节点的结束标签之后的所有节点:following
选取文档中当前节点的开始标签之前的所有节点:preceding
选取当前节点之前的所有同级节点:following-sibling
选取当前节点之前的所有同级节点:preceding-sibling
(4)xpath 的其他定位方式
//*[ contains ( @id, ’xx ’) ]:id包含xx的标签元素
//*[ text() =’ xx ’ ]:文本是xx的标签元素
//*[ contains ( text ( ) , ’xx ’) ]:部分文本是xx的标签元素
//*[starts-with (@id,’xx’ ) ] :属性以id开始,id的值是xx的标签元素,同还有ends-with
//*[starts-with (text ( ),’xx’ ) ]:以文本是 xx 开头的标签元素,同还有ends-with
(5)xpath 验证
1.在代码调试时进行验证
2.在Chrome开发者工具中验证
在console页面输入 $x("xpath"),如下定位百度的搜索框
方框圈中的即是验证 xpath 书写是否正确,定位到的元素是一个list,如果只有一个元素,index=0,如上图圆圈圈中的 “0”,如果是多个元素,则下面就会有 index=1、2...的元素
原文:https://www.cnblogs.com/yjh1995/p/11986137.html