Search code examples
pythongoogle-chromeselenium-webdriverfirefoxwindow-size

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


We created extensions for Chrome, Firefox and Safari and we want to test our extensions with Selenium. We have an Ubuntu server and I installed Firefox and Chrome in it (with ChromeDriver). The tests work, but the problem is that the Chrome window is too small, and many tests fail in Chrome because of the size of the window. With Firefox the window is fine and the tests don't fail. How do I make the window size bigger? We want the window size to be 1920x1080. Here is our code:

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 tests code:

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 window: Firefox window Chrome window: Chrome window

Solution:

I removed self.driver.maximize_window() and instead I added the following lines:

    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"]))

The results:

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

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

The tests pass now.


Solution

  • For Chromejust add before "webdriver.Chrome" init:

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

    For all browsers:

    There is an official selenium python binding for that: 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)
    

    or

    driver.maximize_window()
    

    or with javascript

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