From 8387dba4aecaf8ceb54a1d0a425ae7a6fcbc6ef7 Mon Sep 17 00:00:00 2001 From: Aleksandr Kotlyar Date: Fri, 18 Mar 2022 21:36:54 +0300 Subject: [PATCH 1/4] gh #350 bump to 3.5.4 (#351) --- .github/workflows/test.yml | 7 +++++++ setup.cfg | 2 +- setup.py | 2 +- webdriver_manager/__init__.py | 2 +- 4 files changed, 10 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 5a3f657c..7f044f30 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -12,6 +12,10 @@ on: - .github/workflows/deploy.yml - .github/workflows/codeql-analysis.yml - .github/workflows/FUNDING.yml + - setup.cfg + - setup.py + - webdriver_manager/__init__.py + pull_request: branches: - master @@ -26,6 +30,9 @@ on: - .github/workflows/deploy.yml - .github/workflows/codeql-analysis.yml - .github/workflows/FUNDING.yml + - setup.cfg + - setup.py + - webdriver_manager/__init__.py jobs: test: diff --git a/setup.cfg b/setup.cfg index 89710ee5..9beac7d6 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,5 +1,5 @@ [bumpversion] -current_version = 3.5.3 +current_version = 3.5.4 commit = True tag = True diff --git a/setup.py b/setup.py index 8ac34eaa..f0de02e3 100644 --- a/setup.py +++ b/setup.py @@ -23,7 +23,7 @@ long_description_content_type="text/markdown", packages=setuptools.find_packages(exclude=['tests']), include_package_data=True, - version='3.5.3', + version='3.5.4', description=('Library provides the way to automatically manage drivers for different browsers'), author='Sergey Pirogov', author_email='automationremarks@gmail.com', diff --git a/webdriver_manager/__init__.py b/webdriver_manager/__init__.py index 455727c5..17553bb1 100644 --- a/webdriver_manager/__init__.py +++ b/webdriver_manager/__init__.py @@ -1 +1 @@ -__version__ = '3.5.3' +__version__ = '3.5.4' From ac180f82fedcba4b3e713cdcc3b353bfb7ca2bef Mon Sep 17 00:00:00 2001 From: Aleksandr Kotlyar Date: Tue, 22 Mar 2022 00:41:39 +0300 Subject: [PATCH 2/4] gh #352 codecov driver.py (#353) - IEDriver().__get_divided_version - EdgeChromiumDriver().get_stable_release_version --- tests/test_edge_driver.py | 16 ++++++++++++++++ tests/test_ie_driver.py | 14 ++++++++++++++ webdriver_manager/driver.py | 2 +- 3 files changed, 31 insertions(+), 1 deletion(-) diff --git a/tests/test_edge_driver.py b/tests/test_edge_driver.py index 0b1178e2..d116a8b2 100644 --- a/tests/test_edge_driver.py +++ b/tests/test_edge_driver.py @@ -1,9 +1,12 @@ import os +import re import pytest from selenium import webdriver +from webdriver_manager.driver import EdgeChromiumDriver from webdriver_manager.microsoft import EdgeChromiumDriverManager +from webdriver_manager.utils import PATTERN, ChromeType def test_edge_manager_with_selenium(): @@ -61,3 +64,16 @@ def test_can_get_edge_driver_from_cache(os_type, specific_version): os_type=os_type ).install() assert os.path.exists(driver_path) + + +def test_get_stable_release_version(): + pattern = PATTERN[ChromeType.MSEDGE] + edge_driver = EdgeChromiumDriverManager( + ).driver + + version = edge_driver.get_stable_release_version() + version = re.search(pattern, version).group(0) + + assert len(version.split('.')) == 3, ( + f"version '{version}' doesn't match version's count parts" + ) diff --git a/tests/test_ie_driver.py b/tests/test_ie_driver.py index 940393ee..3dfeea26 100644 --- a/tests/test_ie_driver.py +++ b/tests/test_ie_driver.py @@ -52,3 +52,17 @@ def test_can_get_ie_driver_from_cache(os_type): IEDriverManager(os_type=os_type).install() driver_path = IEDriverManager(os_type=os_type).install() assert os.path.exists(driver_path) + + +@pytest.mark.parametrize('version', ['', '3', '3.4.5.6']) +def test__get_divided_version_raises_exception(version): + iedriver = IEDriverManager().driver + + with pytest.raises(ValueError) as exception: + iedriver._IEDriver__get_divided_version(version=version) + + expected_msg = ( + "Version must consist of major, minor and/or patch, " + "but given was: '{}'".format(version) + ) + assert str(exception.value) == expected_msg diff --git a/webdriver_manager/driver.py b/webdriver_manager/driver.py index 8b54fb16..c0b37831 100644 --- a/webdriver_manager/driver.py +++ b/webdriver_manager/driver.py @@ -230,7 +230,7 @@ def __get_divided_version(self, version): else: raise ValueError( "Version must consist of major, minor and/or patch, " - "but given was: {version}".format(version=self.get_version()) + "but given was: '{version}'".format(version=version) ) From 305ae843795fd99f5791ab7bf1e0f9066ae0bb78 Mon Sep 17 00:00:00 2001 From: Aleksandr Kotlyar Date: Thu, 24 Mar 2022 09:52:21 +0300 Subject: [PATCH 3/4] Raise up code coverage (#354) * gh #355 test when browser not installed - test when browser not installed download latest webdriver --- .github/workflows/test.yml | 50 ++++++++++++++++++- tests_negative/__init__.py | 0 tests_negative/test_browsers_not_installed.py | 42 ++++++++++++++++ webdriver_manager/utils.py | 2 +- 4 files changed, 91 insertions(+), 3 deletions(-) create mode 100644 tests_negative/__init__.py create mode 100644 tests_negative/test_browsers_not_installed.py diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7f044f30..9d0198b9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -44,7 +44,7 @@ jobs: matrix: python-version: ['3.6'] selenium-version: ['3.141.0'] - os: [ macos-latest, windows-latest ] + os: [ windows-latest ] wdm-log: [''] include: - python-version: '3.7' @@ -52,7 +52,7 @@ jobs: os: ubuntu-latest - python-version: '3.10' selenium-version: '3.141.0' - os: ubuntu-latest + os: macos-latest wdm-log: '0' steps: @@ -134,3 +134,49 @@ jobs: with: file: ./coverage.xml name: ${{ matrix.os }}-py${{ matrix.python-version }} + + test-negative: + runs-on: ${{ matrix.os }} + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + strategy: + fail-fast: false + matrix: + python-version: [ '3.6' ] + selenium-version: [ '3.141.0' ] + os: [ ubuntu-latest ] + + steps: + - uses: actions/checkout@v2 + + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v2 + with: + python-version: ${{ matrix.python-version }} + + - name: Uninstall browsers + run: | + sudo apt remove firefox google-chrome-stable -y + sudo apt autoremove && sudo apt autoclean -y + sudo apt clean + + - name: Install Python dependencies + run: | + python -m pip install -U pip wheel + pip install pipenv + pipenv install --dev --skip-lock --python=${{ matrix.python-version }} + pipenv install selenium==${{ matrix.selenium-version }} + + - name: Run tests on Linux (with xvfb) + if: runner.os == 'Linux' + uses: GabrielBB/xvfb-action@v1.0 + with: + run: | + pipenv run py.test -sv --cov-config .coveragerc --cov-report xml --cov-report term:skip-covered --cov=webdriver_manager --tb=short tests_negative/ + + - name: Codecov Upload + uses: codecov/codecov-action@v1 + if: always() + with: + file: ./coverage.xml + name: ${{ matrix.os }}-py${{ matrix.python-version }} diff --git a/tests_negative/__init__.py b/tests_negative/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/tests_negative/test_browsers_not_installed.py b/tests_negative/test_browsers_not_installed.py new file mode 100644 index 00000000..53418739 --- /dev/null +++ b/tests_negative/test_browsers_not_installed.py @@ -0,0 +1,42 @@ +import os + +import pytest +from selenium import webdriver +from selenium.common.exceptions import WebDriverException + +from webdriver_manager.chrome import ChromeDriverManager +from webdriver_manager.firefox import GeckoDriverManager +from webdriver_manager.microsoft import EdgeChromiumDriverManager +from webdriver_manager.utils import OSType, os_name, ChromeType + + +def test_brave_not_installed(): + binary_location = { + OSType.LINUX: "/usr/bin/brave-browser", + OSType.MAC: "/Applications/Brave Browser.app/Contents/MacOS/Brave Browser", + OSType.WIN: f"{os.getenv('LOCALAPPDATA')}\\BraveSoftware\\Brave-Browser\\Application\\brave.exe", + }[os_name()] + + option = webdriver.ChromeOptions() + option.binary_location = binary_location + driver_path = ChromeDriverManager(chrome_type=ChromeType.BRAVE).install() + with pytest.raises(WebDriverException): + webdriver.Chrome(driver_path, options=option) + + +def test_chrome_not_installed(): + driver_path = ChromeDriverManager().install() + with pytest.raises(WebDriverException): + webdriver.Chrome(driver_path) + + +def test_firefox_not_installed(): + driver_path = GeckoDriverManager().install() + with pytest.raises(WebDriverException): + webdriver.Firefox(executable_path=driver_path) + + +def test_msedge_not_installed(): + driver_path = EdgeChromiumDriverManager().install() + with pytest.raises(WebDriverException): + webdriver.Edge(driver_path) diff --git a/webdriver_manager/utils.py b/webdriver_manager/utils.py index 0437e161..b428f9e2 100644 --- a/webdriver_manager/utils.py +++ b/webdriver_manager/utils.py @@ -216,7 +216,7 @@ def get_browser_version_from_os(browser_type=None): if not version: log( - f'Could not get version for {browser_type}.' + f'Could not get version for {browser_type}. ' f'Is {browser_type} installed?' ) else: From 259cfdba30493c8835cba746683b0f14caefe0cf Mon Sep 17 00:00:00 2001 From: Aleksandr Kotlyar Date: Thu, 24 Mar 2022 20:10:30 +0300 Subject: [PATCH 4/4] gh #356 codecov opera.py (#358) - optimize if/else in opera.py::OperaDriverManager::install() also: - move code from tests/utils.py to test_downloader.py - remove 3.13.0, 3.141.59 from test_ie_driver.py as unnecessary - add project's .gitignore --- .gitignore | 8 ++++++++ tests/test_downloader.py | 6 ++++-- tests/test_ie_driver.py | 3 --- tests/utils.py | 5 ----- webdriver_manager/opera.py | 11 ++++------- 5 files changed, 16 insertions(+), 17 deletions(-) delete mode 100644 tests/utils.py diff --git a/.gitignore b/.gitignore index 1564047a..b46d641c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,11 @@ +# Project +ssl_disabled/ +custom/ +.venv*/ +venv*/ +drivers/ +drivers.json + # Created by .ignore support plugin (hsz.mobi) ### Python template # Byte-compiled / optimized / DLL files diff --git a/tests/test_downloader.py b/tests/test_downloader.py index bab3ec7a..10a9eadf 100644 --- a/tests/test_downloader.py +++ b/tests/test_downloader.py @@ -3,10 +3,13 @@ import pytest -from tests.utils import driver_directory from webdriver_manager.driver import ChromeDriver from webdriver_manager.utils import download_file, save_file, ChromeType +project_root = os.path.dirname(os.path.dirname(__file__)) + +driver_directory = f"{project_root}{os.sep}.drivers" + @pytest.fixture() def delete_drivers_dir(): @@ -42,4 +45,3 @@ def test_can_download_chrome_driver(delete_drivers_dir, version): assert file.filename == "driver.zip" archive = save_file(file, driver_directory) assert archive.unpack(driver_directory) == ["chromedriver.exe"] - diff --git a/tests/test_ie_driver.py b/tests/test_ie_driver.py index 3dfeea26..e955d743 100644 --- a/tests/test_ie_driver.py +++ b/tests/test_ie_driver.py @@ -6,10 +6,7 @@ @pytest.mark.parametrize("version", [ - "2.53.1", "3.0", - "3.13.0", - "3.141.59", "3.150.0", # "3.150.1", # "3.150.2", diff --git a/tests/utils.py b/tests/utils.py deleted file mode 100644 index 832f776f..00000000 --- a/tests/utils.py +++ /dev/null @@ -1,5 +0,0 @@ -import os - -project_root = os.path.dirname(os.path.dirname(__file__)) - -driver_directory = f"{project_root}{os.sep}.drivers" diff --git a/webdriver_manager/opera.py b/webdriver_manager/opera.py index c797b111..ff5dd275 100755 --- a/webdriver_manager/opera.py +++ b/webdriver_manager/opera.py @@ -31,14 +31,11 @@ def __init__(self, version="latest", def install(self): driver_path = self._get_driver_path(self.driver) - if os.path.isfile(driver_path): - os.chmod(driver_path, 0o755) - return driver_path - else: + if not os.path.isfile(driver_path): for name in os.listdir(driver_path): if 'sha512_sum' in name: os.remove(os.path.join(driver_path, name)) break - file_path = os.path.join(driver_path, os.listdir(driver_path)[0]) - os.chmod(file_path, 0o755) - return file_path + driver_path = os.path.join(driver_path, os.listdir(driver_path)[0]) + os.chmod(driver_path, 0o755) + return driver_path