如何在 Python 中使用 Selenium 调整 Chrome 和 Firefox 的窗口大小?

How to resize the window of Chrome and Firefox with Selenium in Python?

提问人:Uri 提问时间:4/13/2015 最后编辑:Super Kai - Kazuya ItoUri 更新时间:9/12/2023 访问量:30168

问:

我们为 Chrome、Firefox 和 Safari 创建了扩展程序,我们希望使用 Selenium 测试我们的扩展程序。我们有一个 Ubuntu 服务器,我在其中安装了 Firefox 和 Chrome(使用 ChromeDriver)。测试有效,但问题是 Chrome 窗口太小,并且由于窗口的大小,许多测试在 Chrome 中失败。使用Firefox,窗口很好,测试不会失败。如何使窗口尺寸变大?我们希望窗口大小为 1920x1080。这是我们的代码:

run_daily_selenium_tests.sh

#!/bin/bash

cd /home/ubuntu/selenium_tests

sudo Xvfb :99 -ac -screen 0 1920x1080x24 >/dev/null 2>&1 &
export DISPLAY=:99

today_date_hour=`TZ='Asia/Tel_Aviv' date +"%Y-%m-%d_%H"`
start_hour=`TZ='Asia/Tel_Aviv' date +"%H"`
selenium_test_prefix="/home/ubuntu/selenium_tests/tests/"
selenium_test_suffix=".py"
log_prefix="/home/ubuntu/logs/selenium_tests/"

run_selenium_test()
{
    selenium_test_file_name="${selenium_test_prefix}${file_name}${selenium_test_suffix}"
    log_suffix="_${file_name}.log"
    log_file_name="${log_prefix}${today_date_hour}${log_suffix}"
    python "$selenium_test_file_name" >"$log_file_name" 2>&1
    cat "$log_file_name" | mail -s "$test_name - `TZ='Asia/Tel_Aviv' date +"%Y-%m-%d %H:%M:%S"`" <my_email_address>
}

file_name="chrome_inbox_without_extension_test"
test_name="Chrome Inbox Without Extension Test"
run_selenium_test

file_name="chrome_inbox_1_with_extension_test"
test_name="Chrome Inbox 1 With Extension Test"
run_selenium_test

.....

sudo killall Xvfb >/dev/null 2>&1

if [ $start_hour = "08" ]; then
    cd /home/ubuntu
    /home/ubuntu/scripts/send_daily_report_html.sh
fi

Selenium 测试代码

def get_default_caps(self):
    caps = {}
    caps['name'] = 'Base Selenium Test'
    caps['build'] = '1.0.1'
    if (self.browser == "chrome"):
        self.browser_version = '41.0.2272.118'
        caps['browser'] = 'Chrome'
    elif (self.browser == "firefox"):
        self.browser_version = '37.0.1'
        caps['browser'] = 'Firefox'
    elif (self.browser == "safari"):
        caps['browser'] = 'Safari'
        caps['os'] = 'OS X'
        self.browser_version = "{}.0".format(randint(7, 8))
        if (self.browser_version == "7.0"):
            caps['os_version'] = 'Mavericks'
        elif (self.browser_version == "8.0"):
            caps['os_version'] = 'Yosemite'
    caps['browser_version'] = self.browser_version
    caps['resolution'] = '1920x1080'
    caps['browserstack.debug'] = 'true'
    return caps

def start_selenium_webdriver(self, caps, chrome_options=None, firefox_profile=None):
    print("Starting test \"{}\" with {} {}, resolution {}.".format(caps['name'], caps['browser'], caps['browser_version'], caps['resolution']))
    if (self.browser == "chrome"):
        self.driver = webdriver.Chrome(chrome_options=chrome_options)
    elif (self.browser == "firefox"):
        self.driver = webdriver.Firefox(firefox_profile=firefox_profile)
    else:
        self.driver = webdriver.Remote(
            command_executor='http://username:[email protected]:80/wd/hub',
            desired_capabilities=caps
        )
    self.driver.implicitly_wait(time_to_wait=5)
    self.driver.maximize_window()

Firefox 窗口: Chrome 窗口: Firefox windowChrome window

解决方案

我删除了,而是添加了以下行:self.driver.maximize_window()

    self.driver.set_window_size(1920, 1080)
    size = self.driver.get_window_size()
    print("Window size: width = {}px, height = {}px.".format(size["width"], size["height"]))

结果

使用 Chrome:Window size: width = 1919px, height = 1079px.

使用 Firefox:Window size: width = 1920px, height = 1080px.

测试现已通过。

python google-chrome selenium-webdriver firefox 窗口大小

评论


答:

27赞 Stan E 4/13/2015 #1

对于Chrome,只需在“webdriver.Chrome“初始化:

chrome_options.add_argument("--window-size=1920x1080")

对于所有浏览器:

有一个官方的 selenium python 绑定: http://selenium.googlecode.com/git/docs/api/py/webdriver_remote/selenium.webdriver.remote.webdriver.html#selenium.webdriver.remote.webdriver.WebDriver.set_window_size

driver.set_window_size(1920, 1080)

driver.maximize_window()

或使用 JavaScript

driver.execute_script("window.resizeTo(1920,1080)")

评论

0赞 Uri 4/13/2015
我已经在运行 Chrome 或 Firefox 后立即这样做了(看看我的代码),我还需要做其他事情吗?我还认为Firefox中的窗口不是1920x1080,尽管它足够大,测试不会失败。driver.maximize_window()
1赞 Stan E 4/13/2015
不,你不需要。您确定它们没有完全最大化吗?tou 是否尝试过获取窗口的实际大小 ()?print driver.get_window_size()
0赞 Uri 4/13/2015
谢谢,我检查了:Chrome {u'width': 945, u'height': 1060},测试失败,Firefox {u'width': 1440, u'height': 782},测试通过。使用:Chrome {u'width': 1919, u'height': 1079}, 测试通过, Firefox {u'width': 1920, u'height': 1080}, 测试通过。所以这解决了我的问题。谢谢!driver.maximize_window()driver.set_window_size(1920, 1080)
1赞 Johnny 4/13/2015
我建议你不要使用maximize_window(),而是使用特定的set_window_size(x,y)。最终,不同的主机获得了不同的最大设置,这可能会导致不一致。
2赞 Pikamander2 5/20/2020
请注意,这在无头模式下不起作用,这可能会导致奇怪的异常,例如 ElementNotVisibleException。set_window_size()
0赞 chrisgallardo 8/23/2020 #2
driver.set_window_size(width, height) 

如果您不知道宽度和高度,请使用我的浏览器有多大网站。

0赞 Super Kai - Kazuya Ito 9/12/2023 #3

。* 并且还工作:-window-sizewindow-size

from selenium import webdriver

options = webdriver.ChromeOptions()
options.add_argument("--window-size=1920,1080")
driver = webdriver.Chrome(options=options)

Microsoft Edge。* 并且还工作:-window-sizewindow-size

from selenium import webdriver

options = webdriver.EdgeOptions()
options.add_argument("--window-size=1920,1080")
driver = webdriver.Edge(options=options)

火狐浏览器。* 同时工作和不工作:-width-heightwidthheight

from selenium import webdriver

options = webdriver.FirefoxOptions()
options.add_argument("--width=1920")
options.add_argument("--height=1080")
driver = webdriver.Firefox(options=options)

*我的回答更能解释这一点。