python切换前端的iframe页面_Python+Selenium练习(二十七)- 处理iframe切换

利用Selenium中方法,在不同iframe中切换。

问题:很多时候会发现元素定位没问题,在测试回放过程中,发现就是找不到元素报错。

参考作者编写的网页,利用iframe网页框架,把页面分成上下两个不同的iframe控制的页面。使用方法:把下面的HTML代码保存到一个记事本里面,然后名称为iframe=demo.html

iframe test page

用浏览器打开后是这样的:

具体代码:

driver.switch_to.frame("frame1")

driver.switch_to.default_content()

举例:

import time

from selenium import webdriver

driver = webdriver.Chrome()

driver.maximize_window()

driver.implicitly_wait(6)

driver.get("https://www.126.com")

time.sleep(3)

driver.find_element_by_xpath('//*[@id="lbNormal"]').click()

time.sleep(1)

iframe = driver.find_element_by_xpath('//*[@id="loginDiv"]/iframe')

driver.switch_to.frame(iframe)

# 切换到iframe,若无此行代码,则找不到帐号输入框

driver.find_element_by_name("email").send_keys("selenium switch test")

# 在账号输入框内输入

time.sleep(2)

driver.quit()

### 回答1: 使用PythonSelenium切换iframe的步骤如下: 1. 使用driver.switch_to.frame()方法切换到目标iframe,可以通过iframe的id、name或者index来定位。 2. 在iframe中进行操作,例如查找元素、输入文本等。 3. 使用driver.switch_to.default_content()方法切换回主页面。 示例代码如下: ```python from selenium import webdriver driver = webdriver.Chrome() driver.get("http://example.com") # 切换到第一个iframe iframe = driver.find_element_by_tag_name("iframe") driver.switch_to.frame(iframe) # 在iframe中进行操作 element = driver.find_element_by_xpath("//input[@name='username']") element.send_keys("username") # 切换回主页面 driver.switch_to.default_content() # 关闭浏览器 driver.quit() ``` ### 回答2: 在使用Python Selenium进行自动化测试的过程中,有时我们需要在页面切换iframe,以便于操作页面中的元素。在页面iframe是一个独立的HTML文档,它嵌套在主页面中,需要通过switch_to.frame()方法进行切换。 第一步,先要定位到iframe元素,可以通过以下代码实现: ``` iframe = driver.find_element_by_xpath("xpath_of_iframe") ``` 第二步,使用switch_to.frame()方法切换iframe中,可以通过以下方式切换: ``` driver.switch_to.frame(iframe) ``` 这个时候,当前driver所在位置就已经切换到了iframe里面,我们可以在这个位置操作页面中的元素。 最后,如果需要回到主页面,则可以使用switch_to.default_content()方法进行切换: ``` driver.switch_to.default_content() ``` 以上就是Python Selenium切换iframe的方法,需要注意的是,iframe页面中可能有多个,所以在定位iframe时要准确。同时也要注意,如果元素操作完成后没有切换回主页面,可能会导致后续操作失败,所以要格外小心。 ### 回答3: 在进行Web自动化测试时,经常需要与iframe进行交互操作,pythonselenium库提供了丰富的API来实现iframe切换,在这里我将详细讲解python selenium如何实现iframe切换。 如果一个页面中包含一个或多个iframe,则测试时需要先切换到对应的iframe,然后才能对该iframe内部的元素进行操作。因此,切换iframe是很重要的一步。 1. 通过frame(iframeElem)切换 frame(iframeElem)方法接收一个参数,即目标iframe对应的WebElement对象,代码实现如下: ```python # 导入selenium库 from selenium import webdriver from selenium.webdriver.common.by import By # 初始化selenium webdriver driver = webdriver.Chrome() # 打开网址 driver.get('https://www.baidu.com') # 切换到百度输入框的iframe iframeElem = driver.find_element(By.XPATH, '//iframe[@id="s_lg_img_new"]') driver.switch_to.frame(iframeElem) # 在iframe内部输入关键词 searchElem = driver.find_element(By.XPATH, '//input[@id="kw"]') searchElem.send_keys('selenium') # 切换回主页面 driver.switch_to.default_content() ``` 2. 通过frame(index)切换 frame(index)方法接收一个参数,即目标iframe在当前页面中的索引值,代码实现如下: ```python # 初始化selenium webdriver driver = webdriver.Chrome() # 打开网址 driver.get('https://www.baidu.com') # 切换到百度输入框的iframe driver.switch_to.frame(0) # 等同于 driver.switch_to.frame(driver.find_elements(By.TAG_NAME, "iframe")[0]) # 在iframe内部输入关键词 searchElem = driver.find_element(By.XPATH, '//input[@id="kw"]') searchElem.send_keys('selenium') # 切换回主页面 driver.switch_to.default_content() ``` 3. 通过parent_frame()方法切换 parent_frame()方法用于从当前iframe返回到其父级iframe,如果没有父级iframe,则返回主页面。代码实现如下: ```python # 初始化selenium webdriver driver = webdriver.Chrome() # 打开网址 driver.get('https://www.baidu.com') # 切换到百度输入框的iframe driver.switch_to.frame(0) # 在frame1内部点击链接,跳转到frame2 linkElem = driver.find_element(By.XPATH, '//a[@id="toFrame2"]') linkElem.click() # 切换到frame2 driver.switch_to.frame(0) # 在frame2内部输入 searchElem = driver.find_element(By.XPATH, '//input[@id="kw"]') searchElem.send_keys('selenium') # 切换回frame1 driver.switch_to.parent_frame() # 再次切换到frame2 driver.switch_to.frame(0) # 点击返回到父级iframe driver.find_element(By.XPATH, '//a[text()=" 返回上一级"]').click() # 切换回主页面 driver.switch_to.default_content() ``` 通过上述三种方法,我们可以轻松实现在iframe之间的自由切换,提高Web自动化测试的效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值