Задача
Я хочу выполнить веб-задачу, используя Selenium, geckodriver (сборка ARM) и Iceweasel на моем RaspberryPi 3. Конечно, код работает без проблем на моей машине для разработки (Ubuntu, Intel, 64bit), конечно используя подходящую сборку geckodriver. Код также оказался успешным в докеризованном контейнере. Однако при выполнении на RaspberryPi я получаю указанную ошибку тайм-аута.
Код
Сайт открывается в новом окне, поэтому я переключаюсь на второе в window.handles
.
from selenium import webdriver
from selenium.webdriver.firefox.options import Options
from helpers.automation_helper import *
to_website.click()
el = WebDriverWait(driver, 20).until(
EC.number_of_windows_to_be(2)
)
driver.switch_to.window(driver.window_handles[1])
while get_events_left(driver):
...
На открывшейся странице я ожидаю кнопки редактирования (= мои события), которые я намерен вернуть, как только они будут видны. Пустой массив должен быть возвращен, если нет доступных событий, поэтому не может быть выполнено while l oop. Ожидаемое состояние - это ошибка, возникающая на RaspberryPi.
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.ui import WebDriverWait
def get_events_left(driver):
WebDriverWait(driver, 20).until(
EC.visibility_of_all_elements_located((By.XPATH, "//button[contains(@id, 'protocolEvent')]"))
)
return driver.find_elements_by_xpath("//button[./span/span/svg-icon[@name='edit']]")
Ошибка
Traceback (most recent call last):
File "app.py", line 61, in <module>
while get_events_left(driver):
File "/path/to/app/helpers/automation_helper.py", line 39, in get_events_left
EC.visibility_of_all_elements_located((By.XPATH, "//*[contains(@id,'protocolEvent')]"))
File "/path/to/app/venv/lib/python3.7/site-packages/selenium/webdriver/support/wait.py", line 80, in until
raise TimeoutException(message, screen, stacktrace)
selenium.common.exceptions.TimeoutException: Message: