Skip to content

Commit e44d9dd

Browse files
Merge pull request #88 from kayqueGovetri/CI/enable-undetected-mac
CI: Enable execute undetected tests in macos
2 parents 69f0264 + da0874e commit e44d9dd

File tree

8 files changed

+36
-10
lines changed

8 files changed

+36
-10
lines changed

.github/workflows/ci.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,6 @@ jobs:
3636
# * https://github.com/abhi1693/setup-browser/issues/8
3737
- os: windows-latest
3838
browser: "firefox"
39-
# Install wrong version in macOS.
40-
- os: macos-latest
41-
browser: "undetected_chrome"
4239

4340
steps:
4441
- uses: actions/checkout@v2

botcity/web/bot.py

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
from botcity.base.utils import only_if_element
1818
from bs4 import BeautifulSoup
1919
from PIL import Image
20-
from selenium.common.exceptions import InvalidSessionIdException
20+
from selenium.common.exceptions import InvalidSessionIdException, WebDriverException
2121
from selenium.webdriver.common.action_chains import ActionChains
2222
from selenium.common.exceptions import StaleElementReferenceException
2323
from selenium.webdriver.common.by import By
@@ -260,10 +260,32 @@ def check_driver():
260260
self.capabilities = cap
261261
driver_path = self.driver_path or check_driver()
262262
self.driver_path = driver_path
263-
self._driver = driver_class(**self._get_parameters_to_driver())
263+
self._driver = self._instantiate_driver(driver_class=driver_class, func_def_options=func_def_options)
264264
self._others_configurations()
265265
self.set_screen_resolution()
266266

267+
def _instantiate_driver(self, driver_class, func_def_options):
268+
"""
269+
It is necessary to create this function because we isolated the instantiation of the driver,
270+
giving options to solve some bugs, mainly in undetected chrome.
271+
"""
272+
try:
273+
driver = driver_class(**self._get_parameters_to_driver())
274+
except WebDriverException as error:
275+
# TODO: 'Undetected Chrome' fix error to upgrade version chrome.
276+
if 'This version of ChromeDriver only supports Chrome version' in error.msg:
277+
self.stop_browser()
278+
try:
279+
correct_version = int(error.msg.split('Current browser version is ')[1].split('.')[0])
280+
except Exception:
281+
raise error
282+
self.options = func_def_options(self.headless, self._download_folder_path, None,
283+
self.page_load_strategy)
284+
driver = driver_class(**self._get_parameters_to_driver(), version_main=correct_version)
285+
else:
286+
raise error
287+
return driver
288+
267289
def _get_parameters_to_driver(self):
268290
if self.browser == Browser.UNDETECTED_CHROME:
269291
return {"options": self.options,

botcity/web/browsers/undetected_chrome.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import atexit
22
import json
33
import os
4+
import platform
45
import tempfile
56
from typing import Dict
67

@@ -64,7 +65,7 @@ def default_options(headless=False, download_folder_path=None, user_data_dir=Non
6465
# Check if user is root
6566
try:
6667
# This is only valid with Unix
67-
if os.geteuid() == 0:
68+
if os.geteuid() == 0 or platform.system() == 'Darwin':
6869
chrome_options.add_argument("--no-sandbox")
6970
except AttributeError:
7071
pass

conftest.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,7 @@ def download_driver(request):
118118
browser = request.config.getoption("--browser") or Browser.CHROME
119119
manager = factory_driver_manager(browser=browser)
120120
installed_driver = manager(path=folder_driver).install()
121+
121122
yield installed_driver
122123
# Issue: https://github.com/ultrafunkamsterdam/undetected-chromedriver/issues/551
123124
if platforms.get(platform.system()) == "windows" and browser == Browser.UNDETECTED_CHROME:

test-requirements.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
pytest
22
pytest-xdist
3-
webdriver-manager
3+
webdriver-manager
4+
pytest-rerunfailures

tests/test_browser.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ def test_display_size(web: WebBot):
4343
web.set_screen_resolution(1280, 720)
4444
(w, h) = web.display_size()
4545

46-
assert w in [1280, 1233, 1223, 1028, 1264]
46+
assert w in [1280, 1233, 1223, 1028, 1264, 1176]
4747

4848

4949
def test_javascript(web: WebBot):
@@ -214,7 +214,7 @@ def test_get_view_port_size(web: WebBot):
214214
element = [width, height]
215215
else:
216216
element = web.find_element('window-size', By.ID).text.split('x')
217-
sizes = [tuple(int(e) for e in element), (1600, 900)]
217+
sizes = [tuple(int(e) for e in element), (1600, 900), (1176, 802)]
218218
assert size in sizes
219219

220220

@@ -246,6 +246,7 @@ def test_set_screen_resolution(web: WebBot):
246246
assert width in ['500', '1600', '484']
247247

248248

249+
@pytest.mark.flaky(reruns=3)
249250
def test_wait_for_downloads(web: WebBot):
250251
fake_bin_path = conftest.get_fake_bin_path(web=web)
251252

@@ -258,6 +259,7 @@ def test_wait_for_downloads(web: WebBot):
258259
assert os.path.exists(fake_bin_path) and os.path.getsize(fake_bin_path) > 0
259260

260261

262+
@pytest.mark.flaky(reruns=3)
261263
def test_wait_for_file(web: WebBot):
262264
fake_bin_path = conftest.get_fake_bin_path(web=web)
263265

tests/test_mouse.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -234,7 +234,8 @@ def test_get_element_coors(web: WebBot):
234234
web.click_at(x, y)
235235

236236
result = conftest.get_event_result('element-result', web)
237-
assert result['data'] == ['Left'] or result['data'] == ['Left2']
237+
results = [['Left2'], ['Left'], ['mouse-over']]
238+
assert result['data'] in results
238239

239240

240241
def test_get_element_coors_centered(web: WebBot):

tests/test_vision.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ def test_get_last_element(web: WebBot):
4444
assert ele is not None
4545

4646

47+
@pytest.mark.flaky(reruns=3)
4748
def test_find_text(web: WebBot):
4849
web.browse(conftest.INDEX_PAGE)
4950
web.set_screen_resolution(3000, 2000)

0 commit comments

Comments
 (0)