• 4.9 多表单切换


    在 web 应用中经常会遇到 frame 嵌套页面的应用,页 WebDriver 每次只能在一个页面上识别元素,对
    于 frame 嵌套内的页面上的元素,直接定位是定位是定位不到的。这个时候就需要通过 switch_to_frame()
    方法将当前定位的主体切换了 frame 里。

     1 <html>
     2 <head>
     3 <link href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.mi        n.css"
     4 rel="stylesheet" />
     5 <script type="text/javascript">$(document).ready(function(){
     6 });
     7 </script>
     8 </head>
     9 <body>
    10 <div class="row-fluid">
    11 <div class="span10 well">
    12 <h3>frame</h3>
    13 <iframe id="if" name="nf" src="http://www.baidu.com" width="800"
    14 height="300">
    15 </iframe>
    16 </div>
    17 </div>
    18 </body>
    19 <script
    20 src="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.js"></script>
    21 </html>     
    frame

    这个时候直接定位百度的输入框一定会报找不到元素的错误。那么可以使用 switch_to_frame()先找到

    frame.html 中的<iframe>标签,然后再定位百度输入框。

     1 #coding=utf-8
     2 from selenium import webdriver
     3 import time
     4 import os
     5 driver = webdriver.Firefox()
     6 file_path = 'file:///' + os.path.abspath('frame.html')
     7 driver.get(file_path)
     8 #切换到 iframe(id = "if")
     9 driver.switch_to_frame("if")
    10 #下面就可以正常的操作元素了
    11 driver.find_element_by_id("kw").send_keys("selenium")
    12 driver.find_element_by_id("su").click()
    13 time.sleep(3)
    14 driver.quit()
    fame

    switch_to_frame() 默认可以直接取表单的 id 或 name 属性进行切换。如

    ……
    #id = "if"
    driver.switch_to_frame("if")
    #name = "nf"
    driver.switch_to_frame("nf")
    ……
    那么如果 iframe 没有可用的 id 和 name 可以通过下面的方式进行定位:

    #先通过 xpth 定位到 iframe
    xf = driver.find_element_by_xpath('//*[@class="if"]')
    #再将定位对象传给 switch_to_frame()方法
    driver.switch_to_frame(xf)
    ……
    driver.switch_to_default_content()

    如果完成了在当前表单上的操作可以通过 switch_to_default_content()方法返回到上一层表单。该方法

    不用指定某个表单的返回,默认对应与它最近的 switch_to_frame()方法。

    还有一种方法能够从子frame切回到父frame,而不用我们切回主文档再切进来。

    driver.switch_to.parent_frame()
     
  • 相关阅读:
    2016/1/18
    正则知识点总结
    爬虫反反爬虫:转
    健身与饮食随想--年轻的每一天,都是弥足珍贵的!!!
    python time模块
    c语言求两个数的最大公因数(穷举法,欧几里得算法,递归)
    c语言递归解决汉诺塔问题
    python用函数打印素数(代码未优化)
    羊车门问题提交
    Delphi Tokyo 10.2.3
  • 原文地址:https://www.cnblogs.com/mtfan01/p/9064103.html
Copyright © 2020-2023  润新知