find_element_by_XXX 返回的是一个元素,匹配到的第一个,成员是WebElement对象
find_elements_by_XXX 返回页面当中匹配表达式的所有元素,结果是一个列表,列表的成员是WebElement对象
xpath定位:
绝对定位:/开头 父节点/子节点
绝对路径:从根目录开始,一直到当前的目录。
绝对定位:从根节点开始,一直到当前的节点。 节点顺序/节点位置
相对定位://开头//
相对路径:相对参照物。//相对于前面节点。如果//在开头,那就是相对于整个html。
定位原则:
1、不依靠节点顺序和节点位置
2、只要能够找得到匹配特征的元素就可以。
定位辅助小工具:
F12 => Elements => Ctrl+F(查找)
相对定位表达式:
1、//标签名[@属性名=值]
2、//标签名[test()=值] eg://a[test()="话题"]
3、//标签名[contains(@属性名,值)] //标签名[contains(test(),值)]
eg://a[contains(@href,"TopicDiscuss")]
注意:CSS定位是不支持文本和包含的定位方式
4、* 标签名或者属性名都可以用*,表示匹配所有元素
* 当单一属性无法唯一定位到元素 *
组合条件
逻辑:and or
//标签名[test()=值] and @属性名=值 and contains(@属性名,值)]
//标签名[test()=值] or @属性名=值 or contains(@属性名,值)]
* 仅靠元素本身的特征,已经无法唯一定位 *
层级:
//祖先节点//要找的节点 eg://div[@id="u1"]//a[@name="tj_login"]
**注意:一般都会用//(祖先,子孙级别),不用/(只是父子级别),双斜杠更加灵活
定位的原则:稳定,准确,好维护
模糊匹配:
starts-with:以**开头 eg://*[starts-with(@class,'s_i')]
其他函数:
去掉前后空格:normalize-space
eg://*[normalize-space(text())='我已阅读并同意']
轴定位:
元素的兄弟姐妹,父母
轴运算:
通过父母来找要找的元素结点
1、parent:父结点 注意:定位不能定位可以变动的元素 比如发布作业:当前显示的28,不能通过文本定位定位数字28
2、ancestor:祖先结点 包括父
通过兄弟姐妹来找要找的元素结点
3、preceding-sibling:当前元素结点标签之前的所有兄弟结点
4、following-sibling:当前元素结点标签之后的所有兄弟结点
使用语法:
已知的元素/轴名称::标签名称[@属性名=值] 注意:轴名称前用/单斜杠
eg://span[test()="考勤"]/parent::a