find_element_by_xpath()
1.解决的问题:
无id name class属性
位置定位的元素为活动元素
2.Xpath定位策略:
1). 路径定位
(1) 绝对路径(从起始位置开始的路径) 以/开头。
说明 :从最外层元素到指定元素之间所有经过元素层级路径;如 /html/body/div/p[0]
快速生成: 使用Firebug快速生成xpath的绝对路径(在HTML菜单下右击复制xpath)
(2 ) 相对路径(从中间开始的路径) 以//开始
说明:从第一个符合条件的元素开始(一般配合属性来区分);如//input[@id="user"]
解释//input[@id="user"] --- 匹配的是input属性标签,其中有id="user"属性
快速生成: 使用Fribug的Fripath来生成元素相对路径(选中元素右击复制最简xpath)
2).利用元素属性 (xpath结合元素属性)
说明 : 快速定位元素, 利用元素唯一属性 //*[@id="user"]
解释 //*[@id="user"]
匹配是所有含有 id=user 的标签
在使用xpath路径的时候使用xpath里面的属性 @用来指明属性,做区分说明
//input本身就可以定位到很多的表单, 指明一个属性就可以定位到具体某一个表单,这就是结合的方式
3).层级和属性结合
说明 : 要找的元素没有属性, 但是它的父级有属性 //*[@id="user"]/input
解释 //*[@id="user"]/input
匹配的input标签,因为没有属性找的父级标签
相对路径所有标签,含有id="user"属性标签的下级input标签
4).属性和逻辑结合
说明 元素之间相同的属性同名怎么办?
解释 //*[@id="user" and @class="Tel"]
匹配的所有id属性好几个相同的,需要用两个属性去定位用与去结合另一个元素去解决相同的属性同名问题
5) 文本内容是??的元素
5.1)快速定位文本的方式
页面元素 ,<a id=name > zhangsan</a>
相对路径 文本定位 : //*[text()='zhangsan' ]
解释 定位文本为zhangsan的元素
5.2)属性以??开头的元素
//*[starts-with(@attribute,'??')]
starts-with为固定写法不能变,可变的只有红色字体部分
页面元素 <input type="a" , place="文本测试"/>
//*[starts-with(@place,'文本')]
属性place以文本开头的元素xpath定位
5.3)属性中含有??的元素
//*[contains(@attribute,'??')]
页面元素 <input type="hel" , name="abc"/>
//*[contains(@name,'a')]
根据name属性包含a的元素 xpath定位