Это сообщение об ошибке ...
AttributeError: 'NoneType' object has no attribute 'click'
... означает, что WebDriverWait не было возвращено элемент , поэтому Нет быловозвращается из блока except
, который не имеет атрибута «click».
Поскольку ваш сценарий использования состоит в том, чтобы щелкнуть элемент с текстом как You , паруфакты:
- Вам не нужно ждать, пока домашняя страница загрузится с WebDriverWait отдельно.Таким образом, вы можете удалить метод
wait_for_home_page_to_load(self)
. - Вместо индуцирования после вызова
get()
для URL https://huew.co/
индуцирования WebDriverWait для требуемого элемента, т.е. элемента с текстом Вы будете активируемыми . - Будет лучше поймать фактическое исключение TimeoutException
- Не уверен насчет вашего варианта использования но нет смысла возвращать Нет , скорее распечатайте соответствующий текст и
break
. Вы можете использовать следующее решение:
self.driver = driver
try:
return (WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//a[@class= 'desktop-menu-container ng-scope' and @href='/profile/']"))))
print("YOU link found and returned")
except TimeoutException:
print("YOU link not found ... breaking out")
break
Вы должны добавить следующий импорт:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.common.exceptions import TimeoutException