购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.7 表单切换实战

在自动化测试过程中,有些情况下元素定位正常,但是脚本依然报错。这时很大可能是页面做了一些特殊处理,如页面中存在iframe标签等。本节进行表单切换案例实战。

2.7.1 单表单切换实战

单表单iframe的处理比较简单。如果iframe标签本身有可用的id或name属性,可以直接使用switch_to.iframe()方法去定位,如图2.23所示。

042-01.jpg

图2.23 单表单iframe标签案例界面

示例如下:

from selenium import webdrvier
driver = webdriver.Chrome()
driver.get('https://mail.qq.com/cgi-bin/loginpage')
time.sleep(2)
driver.switch_to.frame('login_frame')    # 切换iframe标签
driver.find_element_by_name("email").send_keys('username')
driver.find_element_by_name("password").send_keys('password')
driver.find_element_by_id("login_button").click()
driver.switch_to.default_content()       # 退出iframe标签

2.7.2 嵌套表单切换实战

在有些情况下,iframe标签在整个页面中不止一个,如嵌套的iframe标签,如图2.24所示。

042-02.jpg

图2.24 嵌套表单iframe标签案例界面

示例如下:

from selenium import webdrvier
driver = webdriver.Chrome()
driver.get('file:///E:/webdriver_api_demo/frame.html')
time.sleep(2)
# 先切换到最外层的iframe标签
driver.switch_to.frame('f1')   
# 再切换到第二个iframe标签
driver.switch_to.frame('f2')
# 定位处在第二个iframe标签中的元素
driver.find_element_by_name("email").send_keys('username')

上述案例中,处理思路是:首先要切换到第一个iframe中,然后切换到第二个iframe标签,这样就可以正常定位到元素了。

2.7.3 平行表单切换实战

在有些情况下,iframe标签在HTML页面中处于平行关系,如图2.25所示。

043-01.jpg

图2.25 平行表单iframe标签案例界面

场景:假设当前处在iframe1标签中,现在要操作的元素在iframe2中。处理思路是:首先从iframe1标签中退出,然后切换到iframe2中去操作元素。

示例如下:

from selenium import webdrvier
driver = webdriver.Chrome()
driver.get('file:///E:/webdriver_api_demo/frame.html')
time.sleep(2)
# 默认在iframe1标签
driver.switch_to.frame('osslog_iframe')   
# 退出iframe1标签
driver.switch_to.default_content()
# 切换到iframe2标签
driver.switch_to.frame('actionFrame')
# 操作iframe2标签下的元素
driver.find_element_by_name("email").send_keys('username')

注意:无论进入几层iframe标签,执行一次退出操作,即是最外层。

2.7.4 表单特殊情况处理

当iframe标签本身id、name属性值是一串动态变化的字符串或iframe本身没有可用的id或name属性时,可以借助层级定位来间接地定位iframe标签,如图2.26所示。

044-01.jpg

图2.26 iframe本身没有可用id/name属性界面

示例如下:

from selenium import webdrvier
driver = webdriver.Chrome()
driver.get('https://mail.qq.com/cgi-bin/loginpage')
time.sleep(2)
# 使用xpath层级定位iframe标签
Xpath = driver.find_element_by_xpath("//div[@id='QMEditorArea']/table/tbody/tr[2]/
         td/iframe")
driver.switch_to.frame(Xpath)   # 切换到iframe标签
driver.find_element_by_name("email").send_keys('username')
driver.find_element_by_name("password").send_keys('password')
driver.find_element_by_id("login_button").click()

第一步,通过xpath层级定位到iframe标签,将定位对象赋值给Xpath;第二步,通过swtich_to.frame()方法切换到iframe标签。 +Fhb/qaub9Iggc49SNutwIRil6VC1WkMgSWn4rIrFi7zVTkXFpwvHiV0HGACoxQ4

点击中间区域
呼出菜单
上一章
目录
下一章
×