一、多表单切换

在web应用中经常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位。这时就需要通过switch_to_frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面中。

  1. #frame.html
  2. <html>
  3. <head>
  4. <link href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css" 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" height="300" >
  14. </iframe>
  15. </div>
  16. </div>
  17. </body>
  18. <script
  19. src="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.js" ></script>
  20. </html>

在此代码中,通过iframe表单嵌入一个百度页面,用浏览器打开如下图所示

这时候直接定位页面上的百度的输入框一定会报错:找不到元素。因此可以使用switch_to.frame()先找到frame.html中的<iframe>标签,然后再定位百度输入框。

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

switch_to.frame()默认可以直接取表单的id或那么属性。如果iframe没有可用的id和name属性,则可以通过下面的方式进行定位。

  1. #frame.py
  2. …..
  3. #先通过xpath定位到iframe
  4. xf=driver.find_element_by_xpath('//*[@class="if"]')
  5.  
  6. #再将定位对象传给switch_to.frame()方法
  7. driver.switch_to.frame(xf)
  8. ……
  9. driver.switch_to.parent_frame()

如果完成了在当前表单上的操作,则可以通过switch_to.parent_content()方法跳出当前一级表单。改方法默认对应于离它最近的switch_to.frame()方法。除此之外,在进入多级表单的情况下,还可以通过switch_to.default_content()调回最外层的页面。

Selenium 2自动化测试实战15(多表单切换)的更多相关文章

  1. Selenium 3----定位一组元素+多表单切换+多窗口切换

    定位一组元素 和定位单个元素类似,WebDriver提供了8种用于定位一组元素的方法.定位一组元素的方法与定位单个元素的方法类似,唯一的区别是在单词element后面多了一个s表示复数. find_e ...

  2. Selenium 2自动化测试实战16(多窗口切换)

    一.多窗口切换 在页面操作过程中有时候点击某个链接会弹出新的窗口,这时就需要主机切换到新打开的窗口上进行操作.WebDriver提供了switch_to.window()方法.可以实现在不同的窗口之间 ...

  3. selenium测试(Java)--多表单切换(十二)

    采用下面的例子来编写用例 <!DOCTYPE html> <html> <head> <meta http-equiv="content-type& ...

  4. selenium 多表单切换处理(iframe/frame)

    在web应用中,前台网页的设计一般会用到iframe/frame表单嵌套页面的应用.简单的就是一个页面签嵌套多个HEML/JSP文件.selenium webdriver  只能在同一页面识别定位元素 ...

  5. Selenium 2自动化测试实战

    Selenium 2自动化测试实战 百度网盘 链接:https://pan.baidu.com/s/1aiP3d8Y1QlcHD3fAlEj4sg 提取码:jp8e 复制这段内容后打开百度网盘手机Ap ...

  6. selenium webdriver——多表单切换与多窗口切换

    多表单切换 >>在Web应用中经常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe 表单内嵌页面上的元素无 ...

  7. Selenium 2自动化测试实战3(函数、类和方法)

    一.函数.类和方法1.函数在python中通过def关键字来定义函数 创建一个add()函数,此函数接收两个参数a,b,通过print()打印a+b的结果.调用add()函数,并且上传两个参数3,5给 ...

  8. 《Selenium 2自动化测试实战 基于Python语言》中发送最新邮件无内容问题的解决方法

    虫师的<Selenium 2自动化测试实战 基于Python语言>是我自动化测试的启蒙书 也是我推荐的自动化测试入门必备书,但是书中有一处明显的错误,会误导很多读者,这处错误就是第8章自动 ...

  9. selenium多表单切换以及多窗口切换、警告窗处理

    selenium表单切换 在做UI自动化,有时候要定位的元素属性在页面上明明是唯一的.却怎么也不执行对元素的操作动作,这时候多半是iframe表单在作怪. 切入表单:iddriver.switch_t ...

随机推荐

  1. docker 安装 mxnet

    1.根据自己的需求安装mxnet:https://hub.docker.com/u/mxnet 2.拉取镜像: nvidia-docker pull mxnet/python:1.5.0_gpu_cu ...

  2. 使用putty对linux与windows之间的文件传输

    一.putty下载 首先下载pytty,解压开发现里面有plink.exe pscp.exe psftp.exe putty.exe puttygen.exe puttytel.exe等可执行文件 进 ...

  3. 多线程-生产者消费者(lock同步)

    二.采用Lock锁以及await和signal方法是实现 import java.io.IOException; import java.util.concurrent.locks.Condition ...

  4. 在Nginx中使用Godaddy的SSL证书

    首先在Godaddy付款购买SSL证书,成功之后打开管理面板,找到刚购买的SSL证书,点击新建证书,这个时候Godaddy会让提供CSR文件内容,可以通过下面的命令行生成csr内容: openssl ...

  5. python深浅copy

    预备知识一——python的变量及其存储 在详细的了解python中赋值.copy和deepcopy之前,了解一下python内存中变量的存储情况. 在高级语言中,变量是对内存及其地址的抽象.对于py ...

  6. Python语法之垃圾回收机制

    目录 一 引入 二.什么是垃圾回收机制? 三.为什么要用垃圾回收机制? 四.垃圾回收机制原理分析 4.1.什么是引用计数? 4.2.引用计数扩展阅读 一 引入 解释器在执行到定义变量的语法时,会申请内 ...

  7. 43 java中的异常处理机制的简单原理和应用

  8. Dubbo配置文件详解

    为新项目练手,把项目中用到的web service.RMI的服务改用Dubbo+Zookeeper+Spring,网上找到几篇不错的配置详解 1.此篇博文主要从以下几种配置方式来讲 XML 配置文件方 ...

  9. mybatis-plus-generator 实践

    package com.huixiaoer.ant.generator; import com.baomidou.mybatisplus.annotation.DbType; import com.b ...

  10. maven项目创建5 service层整合

    创建service相关文件 创建applicationContext-service.xml文件 <?xml version="1.0" encoding="UTF ...