Frame有Frame set、Frame、iFrame三种。Frameset可以直接按照正常元素定位。Frame和iFrame定位方法相同,需要把驱动切换到Frame内再进行操作。
示例:在QQ邮箱中输入用户名
用户名和登陆密码都嵌套在iframe标签内,所以再操作iframe中的元素时,需要先进行驱动的切换。当驱动切换到Frame内部后,只能对Frame内部对元素进行操作。如果需要对Frame之外的元素进行操作,则需要返回原有驱动。
驱动切换方法 | 说明 |
---|---|
driver.switch_to.frame(reference) | 方式1:切换到frame模式(嵌套Frame时,需要一级一级向下切换) |
driver.switch_to.frame(0) | 方式2:用frame的index来定位,第一个是0 |
driver.switch_to.frame(driver.find_element_by_id("login_frame")) | 方式3:通过WebElement对象模式,通过find_element等方法获取元素对象 |
switch_to.parent_frame() | 嵌套Frame:切换到父级Frame(向上切换、回退) |
driver.switch_to_default_content() | 切换到原有模式 |
import time
from selenium import webdriver
driver = webdriver.Chrome()
driver.maximize_window()
driver.get("https://mail.qq.com/cgi-bin/loginpage")
# 驱动切换到Frame(三种方式)
#由于登陆位于第二个frame,所以此处应该是1
driver.switch_to.frame(1)
driver.switch_to.frame("login_frame")
driver.switch_to.frame(driver.find_element_by_id("login_frame"))
# 通过id属性
driver.find_element_by_id("u").send_keys("961370624@qq.com")
# 通过name属性
driver.find_element_by_name("p").send_keys("123456789")
time.sleep(2)
driver.quit()
Selenium 3+Python 3 自动化测试项目实战 从菜鸟到高手 田春成 李靖 /著