selenium 元素定位(三)
元素定位
元素定位需要了解 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
获取id=3的标签的下一个a标签:"//a[@id='3']/following-sibling::a[1]"
获取id=3的标签后面的第N个标签:"//a[@id='3']/following-sibling:: *[N]"
获取id=3的标签的上一个a标签:"//a[@id='3']/preceding-sibling::a[1]"
获取id=3的标签的前面的第N个标签:"//a[@id='3']/preceding-sibling:: *[N]"
获取id=3的标签的父标签:"//a[@id='3']/…"
(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...的元素
3.可以定位元素直接copy xpath
定位到元素,点击右键,选择 copy --> copy xpath
常见元素定位面试题
1、动态属性定位:
使用xpath的动态定位(contains,startwith,父子元素,相邻前后元素定位)
2、元素未定位到的原因:
在其他窗口,在iframe中,在alert中
元素是动态属性
元素还没有加载,需要等待
使用的属性值不唯一,改为使用唯一属性定位
版本迭代时,前端开发修改了属性值