了解iframe
iframe是一种html封装,内嵌页面,方便相同功能的网页复用代码,可以一定程度上减少开发量
所以在测试一个大型web项目的时候,包含iframe标签就不稀奇,但是在切换frame之前去定位,操作frame中的元素都是无法实现的。
切换frame的方式
通过iframe的名字
driver.switch_to.frame('login_frame') driver.
find_element_by_xpath("//a[text()='帐号密码登录']").click()
通过索引去切换iframe标签
time.sleep(2)
driver.switch_to.frame(0)
driver.find_element_by_xpath('//div[@id="wxLoginTab"]').click()
driver.find_element_by_xpath('//p[@id="auto_login"]/a').click()
通过element节点去进行切换
ele_iframe = driver.find_element_by_xpath('//iframe[@id="login_frame"]')
driver.switch_to.frame(ele_iframe)
driver.find_element_by_xpath("//a[text()='帐号密码登录']").click()
xpath定位
逻辑运算
and
//a[@class='nav-block' and @title='京东' and @target='_blank']
or
//span[text()='推荐' or text()='导航']
xpath函数
text() 获取节点的文本内容
contains(parm1,param2) 判断param1中是否函授param2
starts-with(参数1,参数2):判断参数1是否以参数2开头
# 匹配value属性包含 ‘addicated’ 的标签
// input[contains(@value,'addicated')]
# 匹配title属性包含 易购的 a 标签
//a[contains(@title,易购')]
# 匹配文本内容是 五一假期开头的a标签
//a[starts-with(text(),'五一假期')]
切片---后续需要更新
轴定位
定位某个节点/轴名称 ::节点
定位 id = form 的 form节点中,子元素中name=issp的input标签
//form[@id='form']/child::input[@name='issp']
定位id = form的form节点中, 祖先元素中 id =“wrapper”的div标签
//form[@id='form']/ancestor::div[@id='wrapper']
三大等待
1,强制等待 time.sleep()
2,隐式等待 driver.implicitly_wait(30)
driver.implicitly_wait
3,显示等待
WebDriverWait(driver,30,0.2)
wait.until