【WebDriver API】多表单切换

在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

from selenium import webdriver
import os,time

driver=webdriver.Firefox()
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或name属性。如果iframe没有可用的id和name属性,则可以通过下面的方式定位。

frame1.py

from selenium import webdriver
import os,time

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

#先通过xpth定位到iframe
xf=driver.find_element_by_xpath('//*[@name="nf"]')

#再将定位对象传给switch_to.frame()方法
driver.switch_to.frame(xf)
driver.find_element_by_id("kw").send_keys("selenium")
driver.find_element_by_id("su").click()
driver.switch_to.parent_frame()
time.sleep(3)
driver.quit()

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Selenium WebDriver 是一种用于自动化Web应用程序测试的工具,它提供了一系列的API,用于操作浏览器来模拟用户的行为。它是基于Java编写的,因此可以使用Java语言来编写测试脚本。 Selenium WebDriver API 提供了一些常用方法来控制浏览器,如打开网址、在输入框中输入文本、点击按钮等。这些方法可以让我们对页面上的元素进行定位和操作,以模拟用户在浏览器中的行为。 使用 Selenium WebDriver API,我们可以使用多种定位方式来找到页面上的元素,如通过id、name、class等属性进行定位,也可以通过XPath和CSS选择器来定位。定位到元素后,我们可以对其执行一系列的操作,如获取元素的文本、获取元素的属性、点击元素等。 Selenium WebDriver API 还提供了一些常用的操作方法,如切换窗口、切换到iframe、执行JavaScript等。这些方法可以帮助我们处理一些特殊的页面场景,如弹窗、嵌套的iframe等。 使用 Selenium WebDriver API,我们可以编写可维护和可扩展的测试脚本。通过使用Java语言的面向对象特性,我们可以将测试代码进行模块化,使其更加易读和易于维护。此外,Selenium WebDriver 还支持多种浏览器,如Chrome、Firefox等,我们可以轻松地在不同的浏览器上运行测试脚本。 总之,Selenium WebDriver API 提供了丰富的功能和强大的灵活性,使得我们可以编写高效和可靠的自动化测试脚本。无论是对于新手还是有经验的测试人员来说,掌握这些API是非常重要的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值