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()方法。

原文地址:https://www.cnblogs.com/mtfan01/p/9064103.html

时间: 2024-11-03 03:46:34

4.9 多表单切换的相关文章

selenium 窗口切换(多表单切换)

在web应用中,前台网页的设计一般会用到iframe/frame表单嵌套页面的应用.简单的就是一个页面签嵌套多个HEML/JSP文件.selenium webdriver  只能在同一页面识别定位元素,可以狭隘的理解成只能识别当前所在位置的页面上的元素.对于不同的iframe/frame表单中的元素是无法直接定位的.需要结合switchTo().frame()方法切换到指定的frame/iframe中.switchTo().frame()默认的是取表单的ID和name属性.如果没有id和name

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

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

7 frame表单切换、多窗口切换

frame表单切换.多窗口切换 1 frame表单 frame:HTML页面中的一种框架,主要作用是在当前页面中指定区域显示另一页面元素(HTML语言中,frame/iframe标签为表单框架) 1.1 frame表单切换 说明:在WebDriver类库中封装了HTML页面中使用frame表单框架技术定位的方法 方法: 1). driver.switch_to.frame("myframe1") 切换表单方法 (myframe1:为frame表单的name或id) 2). driver

第 4 章 WebDriver API - 4.9 多表单切换 - 4.14 下载文件

4.9 多表单切换 在 Web 应用中经常会遇到 frame/iframe 表单嵌套页面的应用,WebDriver 只能在一个页面上对元素进行识别和定位,无法直接定位 frame/iframe 表单内嵌页面上的元素,这时就需要通过 switch_to.frame()方法将当前定位的主体切换为 frame/iframe 表单的内嵌页面.这里以 126 邮箱登录为例,登录框结构如下. 通过 switch_to.frame()方法切换表单. """ * switch_to.fram

注册和登录表单切换的大气登录页模板

全屏的背景图片,简洁的设计,注册和登录表单可切换,很不错的登录页模板.演示  下载 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><he

学习Selenium元素定位--多表单切换

在Web应用中经常会遇到frame/iframe表单嵌套页面的应用,WebDriver只能在一个页面上对元素识别与定位,对于frame/iframe表单内嵌页面上的元素无法直接定位.这时就需要通过switch_to.frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面中. #!/usr/bin/env/ python # coding:utf-8 # Date:2019/1/10 from selenium import webdriver import time #打

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

采用下面的例子来编写用例 <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <title>frame switch</title> <link href="http://cdn.bootcss.com/bootstrap/3.3.0/

python+selenium的frame表单切换01

switch_to.frame()                               切换frame switch_to.default_content()                切换到主页面 #从frame中切回主文档 switch_to.parent_frame()                    这是switch_to中独有的方法,可以切换到上一层的frame,对于层层嵌套的frame很有用 # selenium给我们提供了一个方法能够从子frame切回到父fram

Selenium基本使用(四)表单切换

在测试过程中,经常会碰到frame和iframe,嵌套等情况 这种情况下直接通过id,name等等是无法定位到的 好在selenium替我们想到了这个问题switch_to方法解决问题 switch_to先定位iframe,根据iframe的id或name进行定位:那么,iframe没有id或name怎么办: #可以用xpath先定位iframe呀 iframe = driver.find_element_by_xpath('//*[@class="kw"]') #再将iframe定位