zoukankan      html  css  js  c++  java
  • selenium

    遇到iframe表单嵌套页面时,webdriver无法直接定位其中的元素,需要转换到内嵌的页面中后,再进行元素定位

    例如:做一个页面,将百度首页嵌套进去

    1 <html>
    2 <hody>
    3     <iframe id="iff" src="http://www.baidu.com" width="1000" height="800"></iframe>
    4 </hody>
    5 </html>

    页面效果如下:

    直接定位百度的输入框会报错:找不到元素。可以先跳转到百度页面后,再定位,如下:

    switch_to.frame()
     1 from selenium import webdriver
     2 import time
     3 
     4 driver = webdriver.Chrome()
     5 driver.get('D:\python\aaa.html')
     6 
     7 driver.switch_to.frame('iff')     # 先跳转到内层页面(默认使用表单的id或name属性)
     8 driver.find_element_by_id('kw').send_keys('zhangyang')   # 再进行元素定位
     9 driver.find_element_by_id('su').click()
    10 
    11 time.sleep(2)
    12 driver.quit()

    如果iframe没有可用的id或name属性,可以先通过元素定位方法定位到iframe元素,再讲iframe元素传递给switch进行跳转,如下:

    1 element_iframe = driver.find_element_by_id('iff')   # 通过元素定位方法先找到iframe元素
    2 driver.switch_to.frame(element_iframe)              # 将元素传递进去

    可以使用如下方法跳出表单:

    1 driver.switch_to.parent_frame()   # 跳出当前表单
    2 driver.switch_to.default_content()  # 跳到最外层页面

    ps:

    mac上,打开本地文件

    file_path = 'file://' + os.path.abspath('a1.html')
    driver.get(file_path)
    
    print(file_path)  # 打印:file:///Users/zhangyang/PycharmProjects/testUI/a1.html
  • 相关阅读:
    hdu 1595(最短路变形好题)
    hdu 5253(最小生成树)
    hdu 2363(枚举+最短路好题)
    hdu 3440(差分约束好题)
    poj 3169&hdu3592(差分约束)
    hdu 3339(最短路+01背包)
    hdu 2145(迪杰斯特拉)
    CodeForces 581D Three Logos
    CodeForces 510E Fox And Dinner
    CodeForces 484D Kindergarten
  • 原文地址:https://www.cnblogs.com/xiaochongc/p/12490067.html
Copyright © 2011-2022 走看看