Selenium 2自动化测试实战15(多表单切换)

一、多表单切换

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

#frame.html
<html>
<head>
<link href="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet"/>
	<script type="text/javascript" >$(document).ready(function() { 
});
	</script> 
</head> 
<body> 
<div class="row-fluid">
	<div class=" span10 well"> 
		<h3>frame</h3> 
			<iframe id="if" name="nf" src="http://www.baidu.com" width="800" height="300" > 
			</iframe> 
	</div> 
</div> 
</body> 
<script
src="http://cdn.bootcss.com/bootstrap/3.3.0/css/bootstrap.min.js" ></script> 
</html> 

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

 

 

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

#frame.py
#coding:utf-8
from selenium import webdriver
import os,time

driver=webdriver.Chrome()
file_path='file:///'+os.path.abspath('frame.html')
driver.get(file_path)

#切换到iframe(id='if')
driver.switch_to_frame("if")

#下面就可以正常的操作元素了
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
time.sleep(3)

driver.quit()

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

#frame.py
…..
#先通过xpath定位到iframe
xf=driver.find_element_by_xpath('//*[@class="if"]')

#再将定位对象传给switch_to.frame()方法
driver.switch_to.frame(xf)
……
driver.switch_to.parent_frame()

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

转载于:https://www.cnblogs.com/Rita-LJ/p/11572798.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值