Web 自动化测试-Selenium元素定位之实战篇
常规的selenium有多种定位方式,但在工作中最常用的还是 id,xpath。 但是也不是所有的元素都适合通过id定位。如果id是动态生成的,则id定位就不合适。 同样的,好用耐用的xpath 定位也需要根据页面元素特点和上下文结构来写。
- 优先使用稳定属性
当id动态变化时,可改用name 等静态属性定位。如果是表单元素(比如input ,select等)则更应该直接使用name 属性
driver.find_element_by_name("username") # 替代动态ID
- 通过多属性组合提高唯一性
driver.find_element_by_css_selector("input[type='submit'][value='登录']")
- 使用部分匹配策略
driver.find_element_by_css_selector("div[id^='fixedPrefix_']")
- 对于xpath,要避免绝对路径,减少因DOM结构变动导致的失效
# 不推荐
/html/body/div[2]/form/input
# 推荐
//input[@name='email']
- 通过多个属性降低耦合度
//input[@type='text' and @placeholder='搜索']
在Selenium体系中, CSS定位和Xpath定位基本都可以完成大部分的元素定位工作。它们的主要区别在于
- Xpath 可以通过元素内容定位,而CSS定位不可以
- CSS定位通常更快,尤其是移动端Appium测试
- Shadow DOM 内的元素只能用CSS定位。