Skip to content

Commit 7e92270

Browse files
finding EdgeDriver version for MAC & LINUX depends on MSEdge browser version and OS type (#249)
- Feature: finding EdgeDriver version for MAC & LINUX depends on MSEdge browser version and OS type (Closes #243, #242) - Fix: Add rights to execute edgedriver binary on linux. - Test Coverage: More tests for EdgeDriver & testing on LINUX/MAC in CI. - delete requirements.txt
1 parent 007efd8 commit 7e92270

File tree

7 files changed

+89
-62
lines changed

7 files changed

+89
-62
lines changed

.github/workflows/test.yml

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,23 @@ jobs:
2626
- name: Install browsers on Linux
2727
if: runner.os == 'Linux'
2828
run: |
29+
sudo apt-get update
30+
sudo apt-get install software-properties-common apt-transport-https wget
31+
32+
wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add -
33+
sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/edge stable main"
34+
sudo apt-get update && sudo apt install microsoft-edge-beta
35+
microsoft-edge --version
36+
2937
wget -qO- https://deb.opera.com/archive.key | sudo apt-key add -
3038
sudo add-apt-repository "deb [arch=i386,amd64] https://deb.opera.com/opera-stable/ stable non-free"
3139
sudo apt-get update
32-
sudo apt-get -y --no-install-recommends install opera-stable chromium-browser
40+
sudo apt-get -y --no-install-recommends install opera-stable
3341
opera --version
3442
43+
sudo apt-get install chromium-browser
44+
chromium --version
45+
3546
- name: Install browsers on Windows
3647
if: runner.os == 'Windows'
3748
shell: powershell

CHANGELOG.md

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,30 @@
11
# Changelog
22

33
## 3.5.1
4-
- Fix huge typo in IEDriver (appeared accidentally in 3.5.0 version)
5-
- Adopt finding latest IEDriverSever for irregular releases in selenium.
4+
### IEDriver
5+
- Fix: huge typo in IEDriver (appeared accidentally in 3.5.0 version)
6+
- Adopt finding latest IEDriverSever for irregular releases in selenium ([#247](https://github.com/SergeyPirogov/webdriver_manager/issues/247))
7+
### EdgeDriver
8+
- Feature: finding EdgeDriver version for MAC & LINUX depends on MSEdge browser version and OS type [#243](https://github.com/SergeyPirogov/webdriver_manager/issues/243), Fix for [#242](https://github.com/SergeyPirogov/webdriver_manager/issues/242)
9+
- Fix: Add rights to execute edgedriver binary on linux.
10+
- Test Coverage: More tests for EdgeDriver
611

12+
---
713
## 3.5.0
814
### Fixes
9-
- Fix: WinError6 while executing script, packed in .exe by pyinstaller (#198)
10-
- Fix: stdio problem when making exe using pyinstaller with noconsole flag (#198)
11-
- Fix: error with execution right on linux afer extraction from zip (#208)
12-
- Fix: In Manager.DriverManager constructor named argument log_level is never passed to log() (#172
13-
- Fix: first-line not hidden when logs disabled (#212)
15+
- Fix: WinError6 while executing script, packed in .exe by pyinstaller ([#198](https://github.com/SergeyPirogov/webdriver_manager/issues/198))
16+
- Fix: stdio problem when making exe using pyinstaller with noconsole flag ([#198](https://github.com/SergeyPirogov/webdriver_manager/issues/198))
17+
- Fix: error with execution right on linux afer extraction from zip ([#208](https://github.com/SergeyPirogov/webdriver_manager/issues/208))
18+
- Fix: In Manager.DriverManager constructor named argument log_level is never passed to log() (#[172](https://github.com/SergeyPirogov/webdriver_manager/issues/172))
19+
- Fix: first-line not hidden when logs disabled ([#212](https://github.com/SergeyPirogov/webdriver_manager/issues/212))
1420

1521
### Features
16-
- Download IEDriverServer from GitHub (#227)
22+
- Download IEDriverServer from GitHub ([#227](https://github.com/SergeyPirogov/webdriver_manager/issues/227))
1723

1824
### Other
19-
- webdriver_manager now tests on 3.6, **3.7, 3.8, 3.9, 3.10** (#235)
20-
- webdriver_manager now supports not only 3.6, 3.7, 3.8, but also **3.9, 3.10** (#235) (tbh always has been)
21-
- webdriver_manager now releases to pypi by clicking "Publish GitHub release" button (#238)
25+
- webdriver_manager now tests on 3.6, **3.7, 3.8, 3.9, 3.10** ([#235](https://github.com/SergeyPirogov/webdriver_manager/issues/235))
26+
- webdriver_manager now supports not only 3.6, 3.7, 3.8, but also **3.9, 3.10** ([#235](https://github.com/SergeyPirogov/webdriver_manager/issues/235)) (tbh always has been)
27+
- webdriver_manager now releases to pypi by clicking "Publish GitHub release" button ([#238](https://github.com/SergeyPirogov/webdriver_manager/issues/238))
2228
---
2329

2430
lots releases ago...

requirements.txt

Lines changed: 0 additions & 6 deletions
This file was deleted.

tests/test_edge_driver.py

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,56 +1,53 @@
11
import os
2+
23
import pytest
34
from selenium import webdriver
5+
46
from webdriver_manager.microsoft import EdgeChromiumDriverManager
5-
from webdriver_manager.utils import os_name, os_type
67

78

8-
# TODO: set 'if os_name() != 'linux':
9-
# when edge > 82 is installed on mac os worker
109
def test_edge_manager_with_selenium():
11-
if os_name() == 'win':
12-
driver_path = EdgeChromiumDriverManager(os_type=os_type()).install()
13-
driver = webdriver.Edge(executable_path=driver_path)
14-
driver.get("http://automation-remarks.com")
15-
driver.quit()
16-
else:
17-
driver_path = EdgeChromiumDriverManager(os_type="win32").install()
18-
assert os.path.exists(driver_path)
10+
driver_path = EdgeChromiumDriverManager().install()
11+
12+
driver = webdriver.Edge(executable_path=driver_path, capabilities={})
13+
14+
driver.get("http://automation-remarks.com")
15+
driver.quit()
1916

2017

2118
def test_edge_manager_with_wrong_version():
2219
with pytest.raises(ValueError) as ex:
23-
driver_path = EdgeChromiumDriverManager("0.2",
24-
os_type='win64').install()
20+
driver_path = EdgeChromiumDriverManager(
21+
version="0.2",
22+
os_type='win64',
23+
).install()
2524
driver = webdriver.Edge(executable_path=driver_path)
2625
driver.quit()
27-
assert "There is no such driver by url "\
28-
"https://msedgedriver.azureedge.net/0.2/edgedriver_win64.zip" in \
29-
ex.value.args[0]
26+
27+
assert (
28+
"There is no such driver by url "
29+
"https://msedgedriver.azureedge.net/0.2/edgedriver_win64.zip"
30+
) in ex.value.args[0]
3031

3132

32-
# TODO: add "mac64" when https://msedgedriver.azureedge.net/LATEST_STABLE
33-
# return edgedriver > 82
34-
# see:
35-
# https://msedgewebdriverstorage.z22.web.core.windows.net/?prefix=82.0.418.0/
36-
@pytest.mark.parametrize('os_type', ['win32', 'win64'])
33+
@pytest.mark.parametrize('os_type', ['win32', 'win64', 'linux64', 'mac64'])
3734
def test_can_download_edge_driver(os_type):
3835
path = EdgeChromiumDriverManager(os_type=os_type).install()
3936
assert os.path.exists(path)
4037

4138

42-
# TODO: add "mac64" when https://msedgedriver.azureedge.net/LATEST_STABLE
43-
# return edgedriver > 82
44-
# see:
45-
# https://msedgewebdriverstorage.z22.web.core.windows.net/?prefix=82.0.418.0/
46-
@pytest.mark.parametrize('os_type', ['win32', 'win64'])
39+
@pytest.mark.parametrize('os_type', ['win32', 'win64', 'mac64', 'linux64'])
4740
def test_can_get_edge_driver_from_cache(os_type):
4841
EdgeChromiumDriverManager(os_type=os_type).install()
4942
driver_path = EdgeChromiumDriverManager(os_type=os_type).install()
5043
assert os.path.exists(driver_path)
5144

5245

53-
def test_edge_with_specific_version():
54-
bin_path = EdgeChromiumDriverManager("77.0.189.3",
55-
os_type='win64').install()
46+
@pytest.mark.parametrize('os_type', ['win32', 'win64', 'mac64', 'linux64'])
47+
@pytest.mark.parametrize('specific_version', ['86.0.600.0'])
48+
def test_edge_with_specific_version(os_type, specific_version):
49+
bin_path = EdgeChromiumDriverManager(
50+
version=specific_version,
51+
os_type=os_type,
52+
).install()
5653
assert os.path.exists(bin_path)

webdriver_manager/driver.py

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from webdriver_manager.logger import log
77
from webdriver_manager.utils import (
88
validate_response,
9-
chrome_version,
9+
get_browser_version_from_os,
1010
ChromeType,
1111
os_name,
1212
OSType,
@@ -52,7 +52,7 @@ def __init__(self, name, version, os_type, url, latest_release_url,
5252
super(ChromeDriver, self).__init__(name, version, os_type, url,
5353
latest_release_url)
5454
self.chrome_type = chrome_type
55-
self.browser_version = chrome_version(chrome_type)
55+
self.browser_version = get_browser_version_from_os(chrome_type)
5656

5757
def get_os_type(self):
5858
if "win" in super().get_os_type():
@@ -264,18 +264,30 @@ def tagged_release_url(self, version):
264264

265265

266266
class EdgeChromiumDriver(Driver):
267-
def __init__(self, name, version, os_type, url, latest_release_url):
268-
super(EdgeChromiumDriver, self).__init__(name, version, os_type, url,
269-
latest_release_url)
270-
self.browser_version = ""
267+
def __init__(
268+
self,
269+
name,
270+
version,
271+
os_type,
272+
url,
273+
latest_release_url,
274+
):
275+
super(EdgeChromiumDriver, self).__init__(
276+
name,
277+
version,
278+
os_type,
279+
url,
280+
latest_release_url,
281+
)
282+
self.browser_version = get_browser_version_from_os(ChromeType.MSEDGE)
271283

272-
def get_latest_release_version(self):
273-
# type: () -> str
274-
if os_name() == OSType.LINUX:
275-
latest_release_url = "https://msedgedriver.azureedge.net/LATEST_STABLE"
276-
else:
277-
major_edge_version = chrome_version(ChromeType.MSEDGE).split(".")[0]
278-
latest_release_url = self._latest_release_url + '_' + major_edge_version
284+
def get_latest_release_version(self) -> str:
285+
major_edge_version = self.browser_version.split(".")[0]
286+
latest_release_url = {
287+
OSType.WIN in self.get_os_type(): f'{self._latest_release_url}_{major_edge_version}_WINDOWS',
288+
OSType.MAC in self.get_os_type(): f'{self._latest_release_url}_{major_edge_version}_MACOS',
289+
OSType.LINUX in self.get_os_type(): f'{self._latest_release_url}_{major_edge_version}_LINUX',
290+
}[True]
279291
resp = requests.get(latest_release_url)
280292
validate_response(resp)
281293
return resp.text.rstrip()

webdriver_manager/microsoft.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import os
2+
13
from webdriver_manager import utils
24
from webdriver_manager.driver import EdgeChromiumDriver
35
from webdriver_manager.driver import IEDriver
@@ -55,4 +57,7 @@ def __init__(
5557
)
5658

5759
def install(self):
58-
return self._get_driver_path(self.driver)
60+
driver_path = self._get_driver_path(self.driver)
61+
62+
os.chmod(driver_path, 0o755)
63+
return driver_path

webdriver_manager/utils.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,8 @@ def linux_browser_apps_to_cmd(*apps: str) -> str:
126126
return ' || '.join(list(map(lambda i: f'{i} --version{ignore_errors_cmd_part}', apps)))
127127

128128

129-
def chrome_version(browser_type=ChromeType.GOOGLE):
129+
def get_browser_version_from_os(browser_type=None):
130+
"""Return installed browser version."""
130131
pattern = r'\d+\.\d+\.\d+'
131132

132133
cmd_mapping = {
@@ -141,6 +142,7 @@ def chrome_version(browser_type=ChromeType.GOOGLE):
141142
OSType.WIN: r'reg query "HKLM\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\Google Chrome" /v version'
142143
},
143144
ChromeType.MSEDGE: {
145+
OSType.LINUX: linux_browser_apps_to_cmd('microsoft-edge', 'microsoft-edge-stable', 'microsoft-edge-beta', 'microsoft-edge-dev'),
144146
OSType.MAC: r'/Applications/Microsoft\ Edge.app/Contents/MacOS/Microsoft\ Edge --version',
145147
OSType.WIN: r'reg query "HKEY_CURRENT_USER\SOFTWARE\Microsoft\Edge\BLBeacon" /v version',
146148
}

0 commit comments

Comments
 (0)