1. 多表单切换

WebDriver只能在一个页面上对元素进行识别和定位,无法直接定位frame/iframe表单内嵌页面上的元素,这是就需要通过switch_to.frame()方法将当前定位的主体切换为frame/iframe表单的内嵌页面
通过switch_to.frame()切换表单
通过switch_to.default_content()回到最外层的页面

from time import sleep
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://www.126.com")
driver.maximize_window()
sleep(2)

driver.find_element_by_link_text("密码登录").click()
login_frame = driver.find_element_by_css_selector("iframe[id^=x-URS-iframe]")

driver.switch_to.frame(login_frame)
driver.find_element_by_name("email").send_keys("user@126.com")
driver.find_element_by_name("password").send_keys("123456")
driver.find_element_by_id("dologin").click()
driver.switch_to.default_content()

2 多窗口切换

current_window_handle:获得当前窗口
子主题 1
window_handles:返回所有窗口的句柄到当前会话
switch_to.window():切换到相应的窗口

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.maximize_window()

# 获得当前窗口句柄
search_window = driver.current_window_handle

driver.find_element_by_link_text("登录").click()
driver.implicitly_wait(5)
driver.find_element_by_link_text("立即注册").click()

# 获得当前所有窗口句柄
all_handles = driver.window_handles

# 进入注册窗口进行操作
for handle in all_handles:
if handle != search_window:
driver.switch_to.window(handle)
print(driver.title)
driver.find_element_by_name("userName").send_keys("usename")
driver.find_element_by_xpath("//input[@id='TANGRAM__PSP_4__phone']").send_keys("134XXXXXXXX")
driver.close()
driver.switch_to.window(search_window)
print(driver.title)
driver.quit()

 3 警告框处理

在WebDriver中处理Javascript生成的alert、confirm、prompt,使用switch_to.alert方法定位,然后使用text、accept、dismiss、send_keys等进行操作
text:返回alert、confirm、prompt中的文字信息
accept():接收现有警告框
dismiss():解散所有警告框
send_keys():在警告框中输入文本(如果可以输入文本的话)

from time import sleep
from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")
driver.maximize_window()

driver.find_element_by_link_text("设置").click()
driver.find_element_by_link_text("搜索设置").click()
sleep(2)
driver.find_element_by_class_name("prefpanelgo").click()

# 获取警告框
alert = driver.switch_to.alert
text = alert.text
print(text)
# 接受警告框
alert.accept()
driver.quit()

4 下拉框处理

WebDriver提供了Select类来处理下拉框
导入Select类:
from selenium.webdriver.support.select import Select
Select类:用于定位<select>标签
select_by_value():通过value值定位下拉框选项
select_by_visible_text():通过text值定位下拉选项
select_by_index():根据下拉框的索引进行选择。第一个选项为0,第二个选项为1

from time import sleep
from selenium import webdriver
from selenium.webdriver.support.select import Select

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")

link = driver.find_element_by_link_text("设置").click()
driver.find_element_by_link_text("搜索设置").click()
sleep(2)

sel = driver.find_element_by_xpath("//select[@id='nr']")
sleep(2)
Select(sel).select_by_value("50")
sleep(2)
Select(sel).select_by_index("1")
sleep(2)
Select(sel).select_by_visible_text("每页显示10条")

5 窗口截图

WebDriver提供了截图函数save_screenshot(),可以用来截取当前窗口

from selenium import webdriver

driver = webdriver.Chrome()
driver.get("http://www.baidu.com")

# 截取当前窗口 driver.save_screenshot(
"./baidu.png") driver.quit()
02-12 22:04