元素定位总结/定位原则/XPATH定位/find_element

定位辅助工具:

chrome:一,自带的ctrl+f 二,ChroPath插件
firefox:firebug插件

定位原则:

1,不依靠节点顺序和节点位置。
2,只要能够找得到匹配特征的元素久可以。
3,有id尽量用,尽量定位到要操作的元素上。
4,定位选取时分析页面结构,考虑属性不会变化,稳定的不变的,有代表性。

8种定位策略:

ID:id是指页面元素的属性名id值,因为元素id在整个页面中是唯一的,所以如果元素有id属性,通过id定位是首选的方式。如果id不唯一则不建议使用。对应定位方法:find_element_by_id
NAME:通过元素的name属性进行定位。对应定位方法:find_element_by_name
CLASS NAME:通过元素的class name属性进行定位。对应定位方法:find_element_by_class_name
TAG NAME:通过元素名定位,基本不用,因为相同的tagname太多。对应定位方法:find_element_by_tag_name
LINK_TEXT:通过链接文本内容全匹配。对应定位方法:find_element_by_link_text
PARTIAL LINK:通过链接文本内容模糊匹配。对应定位方法:find_element_by_partial_link_text
CSS:css_selector定位。对应定位方法:find_element_by_css_selector
XPATH:通过xpath表达式定位。对应定位方法:find_element_by_xpath

XPATH定位:

基本语法:

/ 绝对定位,从根节点选取

// 相对定位,从匹配选择的当前节点选择文档中的节点,而不考虑他们的位置。

. 选取当前节点

.. 选取当前节点的父

@ 选取属性。@class="xxx" @id="xxx"。属性放在中括号[]中

  • 通配符。匹配所有标签

@* 匹配所有属性

绝对定位:

/开头  父节点/子节点关系

相对定位:

//开头 后可以接//

对比优缺点:页面元素一旦发生变化,绝对路径就会失效。
所以一般不适用绝对路径来定位元素。

定位方式:

1,使用标签名+节点属性定位, //标签名[@属性名=值]
2,使用文本匹配定位,//标签名[text()=值]
3,模糊匹配(包含),//标签名[contains(@属性/text(),值)]
4,逻辑运算 and or,//标签名[@属性=值 and contains(@属性,值) and text()=值]
5,层级定位,//一级元素//二级元素//N级元素
6,组合元素索引(下标)定位,//li[@class="num"][2]//img
7,轴定位:常用4种
ancestor:祖先节点 包括父
parent:父节点
preceding-sibling:当前元素节点标签之前的所有兄弟节点
following-sibling:当前元素节点标签之后的所有兄弟节点 #要找的元素是已知的后边元素

find_element和find_elements:

源码中,8大定位方式实际都是调用driver.find_element(by, value),直接使用这个方法框架中使用时会更加灵活一些。使用时要导入By类:from selenium.webdriver.common.by import By
find_element(By.定位策略,定位表达式),返回的是WebElement对象。
find_elements(By.定位策略,定位表达式),返回时一个对象列表。

难者不会 会者不难 学是关键
原文地址:https://www.cnblogs.com/hsmwm/p/14931016.html