selenium 窗口处理相关操作。
窗口操作
# 窗口最大化
driver.maximize_window()
# 窗口最小化
driver.minimize_window()
# 窗口全屏化
driver.fullscreen_window()
# 获取窗口大小
size = driver.get_window_size()
width = size.get("width")
height = size.get("height")
# 设置窗口大小
driver.set_window_size(1024, 768)
# 获取窗口左上角坐标位置
position = driver.get_window_position()
x = position.get('x')
y = position.get('y')
# 设置窗口左上角坐标位置
driver.set_window_position(0, 0)
# 窗口截图
driver.save_screenshot('./image.png')
# 对特定元素截图
ele = driver.find_element(By.ID, 'su')
ele.screenshot('./image.png')
多窗口场景处理
网页上点击某个链接,有可能会打开一个新的标签页。这种情况,需要切换到新的窗口来执行后续操作。
每个窗口都有一个唯一标识句柄,通过句柄来切换窗口。文章来源:https://www.toymoban.com/news/detail-540860.html
# 当前标签页
driver.current_window_handle
# 所有标签页
driver.window_handles
# 切换标签页
driver.switch_to.window(handle)
# 关闭当前窗口
driver.close()
# 关闭所有窗口,退出驱动
driver.quit()
""" selenium > 4.0 """
# 新建浏览器标签页并切换 handle
driver.switch_to.new_window('tab')
# 新建浏览器窗体并切换 handle
driver.switch_to.new_window('window')
示例文章来源地址https://www.toymoban.com/news/detail-540860.html
from selenium import webdriver
from selenium.webdriver.common.by import By
class TestSwitchWindow:
def setup(self):
self.driver = webdriver.Chrome()
self.driver.maximize_window()
self.driver.implicitly_wait(3)
self.driver.get("http://www.baidu.com")
def teardown(self):
self.driver.quit()
def test_switch_register_to_home(self):
""" 百度首页,点击注册,会新打开一个注册页面;
在注册页面输入账号密码后切换回第一个窗口
"""
self.driver.find_element(By.LINK_TEXT, "登录").click()
self.driver.find_element(By.LINK_TEXT, "立即注册").click()
home_handle = self.driver.current_window_handle # 当前窗口句柄
windows = self.driver.window_handles # 所有窗口句柄:list
# 切换到最后一个窗口,也就是新打开的「注册」页面
self.driver.switch_to.window(windows[-1])
self.driver.find_element(By.ID, "TANGRAM__PSP_4__userName").send_keys("login_username")
# 切换到第一个,输入用户名密码
self.driver.switch_to.window(home_handle)
# self.driver.switch_to.window(windows[0])
self.driver.find_element(By.ID, "TANGRAM__PSP_11__userName").send_keys("login_username")
def test_switch_windows_by_loop(self):
""" 打开多个窗口,最后定位到「百度图片窗口」
"""
home_handle = self.driver.current_window_handle # 当前窗口句柄
tab_texts = ["新闻", "视频", "图片", "贴吧"]
for text in tab_texts:
self.driver.find_element(By.LINK_TEXT, text).click()
self.driver.switch_to.window(home_handle)
for handle in self.driver.window_handles:
self.driver.switch_to.window(handle)
if "百度图片" in self.driver.title:
break
assert self.driver.title == "百度图片-发现多彩世界"
def test_window_close(self):
""" 通过百度首页打开新闻页面,然后关闭首页
"""
home_handle = self.driver.current_window_handle
self.driver.find_element(By.LINK_TEXT, "新闻").click()
self.driver.close()
# print(self.driver.title) # 窗口关闭后,再次操作报错:NoSuchWindowException
# 因为首页已经被关闭,需要手动切换到已存在的窗口上
self.driver.switch_to.window(self.driver.window_handles[-1])
assert "百度新闻" in self.driver.title
到了这里,关于【selenium】窗口操作的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!