selenium自动化特殊场景

1.XPATH的使用

XPATH是一门在xml文档中查找信息的语言。XPath用于在xml中通过元素和属性进行导航。XPath 使用路径表达式来选取 XML 文档中的节点或者节点集,包括绝对路径和相对路径。

绝对XPATH其实是标签的层级路径。/html/body/div[3]/div/div[2]/div[1]/div/ul[4]/li[2]/a。 很不稳定,只要元素前面多出元素就可能影响元素定位的准确性。

相对XPATH是通过属性定位元素。推荐使用相对XPATH或这样的手写XPATH。相对XPATH的结构:

/ 代表路径
// 代表在当前路径下寻找(比如以//开头,就是在整个html文档中寻找)
*或标签名 // *(所有标签)   //a(所有元素里面的a标签)
[ ]里面写筛选条件

[@id="username"]  筛选id为username的元素

@属性

选取属性。id,name…… (凡是标签名里面的都是属性的键值对)

特殊属性 test()   (元素的文本值)        //a[text()="个人信息"]
contains

包含 (属性值或者文本值包含)

//a[contains(text(),"个人信息")]

1.1XPATH的调试

(1) 打开DevTools(command+option+i) ——打开console页签,使用$x('xpath')调试

(2)在chorme的f12里面(command+f)——输入查找的相对xpath

2.关联型XPATH

关联型xpath即使用轴定位编写xpath。以一个元素为轴,寻找其父元素,子元素,兄弟元素。

#寻找子元素
$x('//span[test()="A"]/../../li//a[text()="A的子元素"]'')
#寻找距离最近的父元素
$x('//span[test()="A"]/ancestor::div[1]')
#寻找最古老的父元素
$x('//span[test()="A"]/ancestor::div')
#寻找兄弟元素
$x('//span[test()="A"]/../following-sibling::li[1]')

3.切换iframe内联框架和切换窗口定位

如果报错找不到元素,有可能是因为该元素在iframe内联框架当中。在selenium里面,每一个iframe和网页本身都是被分割开来的独立部分,必须一层一层进入到iframe,才能看到。

# 切换进入iframe(进入房间)
frame = driver.find_element(By.XPATH, '//*[@id="layui-layer-iframe1"]')
driver.switch_to.frame(frame)
# 退出iframe一定是退到客厅(最外层)
driver.switch_to.default_content()

若网页打开了新窗口,你希望在新打开的窗口上定位操作元素,就必须把窗口切换过去。

# 切换窗口
handles = driver.window_handles
print(handles)
# # 按下标切换
# driver.switch_to.window(handles[1])
# 按title切换
for h in handles:
    driver.switch_to.window(h)
    if driver.title.__contains__('我的订单'):
        break

 

你可能感兴趣的:(软件测试,selenium,自动化,测试工具)