Document

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()

      

   

 

posted on 2023-05-06 17:18  小排顾  阅读(356)  评论(0编辑  收藏  举报

导航