Пример из документации Selenium:
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(driver, 10)
element = wait.until(EC.element_to_be_clickable((By.ID, 'someid')))
Итак, в вашем случае это должно быть:
from selenium.webdriver.support import expected_conditions as EC
wait = WebDriverWait(self.driver, 10)
element = wait.until(EC.presence_of_element_located((By.XPATH, path)))
Здесь 10
в WebDriverWait(driver, 10)
- это максимальные секунды ожидания.то есть он ожидает до 10 или условия, в зависимости от того, что будет первым.
Некоторые общие условия, которые часто используются при автоматизации веб-браузеров:
- title_is title_contains
- sence_of_element_located
- visibility_of_element_located visibility_of
- sence_of_all_elements_located
- text_to_be_present_in_element
- text_to_be_present_in_element_value и т. Д. Больше доступно здесь.
Также приведена документация для поддержки ожидаемых условий.
Еще один способ решения этой проблемы - написать метод on, например:
def find_svg(driver):
element = driver.find_element_by_xpath(path)
if element:
return element
else:
return False
А затем позвоните Webdriver и подождите как:
element = WebDriverWait(driver, max_secs).until(find_svg)