Добрый день, коллеги!
Написал тестовый набор selenium + pytest для веб приложения. Данное приложение имеет и Electron app версию для Mac (офф сайт Electron’а). Хочу с минимальными усилиями перенести данный набор для тестирования Electron-версии данного приложения. Но при попытке запуска столкнулся с проблемой. Я запускаю тест, тот в свою очередь запускает Electron приложение и падает с ошибкой. Я пытался реализовать это двумя способами, ниже привожу их и соответствующие ошибки:
Подход 1. Стартуем локально chromedriver:
$ ./chromedriver --port=9515 > /dev/null
Фрагмент conftest.py:
from selenium import webdriver
...
APP_PATH = "/path_to_app/my_app.app/Contents/MacOS/my_app"
PORT = "http://localhost:9515"
...
@pytest.fixture(scope='function', autouse=True)
def test_setup(request):
driver = webdriver.remote.webdriver.WebDriver(
command_executor=PORT,
desired_capabilities = {'chromeOptions':{ 'binary': APP_PATH}},
browser_profile=None,
proxy=None,
keep_alive=False)
driver.implicitly_wait(15)
def fin():
driver.quit()
request.addfinalizer(fin)
return driver
Тест test_electron.py:
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
def test_electron(test_setup):
# electron test
driver = test_setup
el = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//input[@placeholder='Your phone number']")))
el.send_keys('1234567890')
Запуск:
$ py.test -v -s tests/test_electron.py
Ошибка:
E selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited normally
E (Driver info: chromedriver=2.30.477690 (c53f4ad87510ee97b5c3425a14c0e79780cdf262),platform=Mac OS X 10.12.6 x86_64)
/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/selenium/webdriver/remote/errorhandler.py:192: WebDriverException
Подход 2. Без локального старта chromedriver (использовал просто python для простоты):
import os
import time
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
chromedriver_path = "/path_to_chromedriver/chromedriver"
electron_path = "/path_to_app/my_app.app/Contents/MacOS/my_app"
opts = Options()
opts.binary_location = electron_path
driver = webdriver.Chrome(executable_path=chromedriver_path, chrome_options=opts)
driver.implicitly_wait(15)
time.sleep(3) # отладочные слипы)
el = WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//input[@placeholder='Your phone number']")))
el.send_keys('1234567890')
time.sleep(3)
driver.find_element_by_xpath("//div[.='Next']").click()
time.sleep(3)
driver.quit()
Запуск:
$ python3.6 check_form.py
Ошибка:
selenium.common.exceptions.WebDriverException: Message: unknown error: Chrome failed to start: exited normally
(Driver info: chromedriver=2.30.477690 (c53f4ad87510ee97b5c3425a14c0e79780cdf262),platform=Mac OS X 10.12.6 x86_64)
Подскажите, кто сталкивался с подобным, как правильно реализовать данное взаимодействие? Ниже привожу скрин, показывающий, что элемент с приведенным XPATH находится и единственный.