[セレン]ウィンドウ操作

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')

マルチウィンドウシーン処理

Web ページ上のリンクをクリックすると、新しいタブが開く場合があります。この場合、以降の操作を行うには、新しいウィンドウに切り替える必要があります。

各ウィンドウには固有の識別ハンドルがあり、そのハンドルによってウィンドウが切り替わります。

# 当前标签页
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') 

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

おすすめ

転載: blog.csdn.net/lan_yangbi/article/details/127968172