web自动化9--弹窗/iframe嵌套,无法获取到
一、很多时候,会存在嵌套或者弹窗的情况,到时无法获取到页面的元素,那么就需要先把页面属性移动到对应的元素上去
1)几种不同的弹窗
①弹窗alert,浏览器自带的弹窗
先用switch_to_alert()方法切换到alert弹出框上
#点击确认按钮
alert.accept()
#相当于点右上角x,取消弹出框
alert.dismiss()
②弹窗的元素button_confirm
c = driver.find_element_by_id("confirm")
c.click()
# 获取弹窗(进入弹窗)
confirm = driver.switch_to.alert
# 获取弹窗文本值
print("弹窗文本值:", confirm.text)
# 4.2.4 点击弹窗取消按钮
confirm.dismiss()
③触发弹窗的元素button_prompt,完成send_keys("输入内容")方法
p = driver.find_element_by_id("prompt")
p.click()
# 获取弹窗(进入弹窗)
prompt = driver.switch_to.alert
# 获取弹窗文本值
print("弹窗文本值:", prompt.text)
# 点击弹窗确定按钮
prompt.accept()
④页面自定义的弹窗
# JavaScript语法
j = 'document.getElementById("xxxx").style.display="none";'
# 使用Python执行JS语句
driver.execute_script(j)
还可以通过其他的方式获取,elements时需要注意索引
2)iframe,switch_to_frame()/driver.switch_to.frame()
1、定位某一个元素的时候发现元素是在iframe下面,例如:<iframe id="x--iframe" frameborder="0" name=""></iframe>
2、把定位,定位到iframe上,所以就需要用:switch_to_frame/driver.switch_to.frame()的方法,两种写法,看各自的版本支持
①元素有唯一的id和name
driver.switch_to_frame("有id/name的话可以直接写上id/name")
②没有id和nama,怎么办,那就要先定位到iframe上去,再定位iframe里面的元素
#通过页面的tag去定位
f=driver.find_element_by_tag_name("iframe")
#再定位到这个frame
driver.switch_to_frame(f)
#再定位frame下面的元素
driver.find_element_by_name("").click()
3、iframe上的元素已经操作完成了,此时需要退出当前的iframe,回到上一级页面继续
#释放当前的iframe回到主页面(两种看各自的版本)
driver.switch_to_default_content()
driver.switch_to.default_content()
本文来自博客园,作者:小排顾,转载请注明原文链接:https://www.cnblogs.com/SparkProgram/p/17378038.html