Как исправить AttributeError: у объекта 'NoneType' нет атрибута 'click' - PullRequest
0 голосов
/ 03 февраля 2019

Как устранить ошибку AttributeError: 'NoneType' object has no attribute 'click'?Это терпит неудачу в self.home.get_you_button().click().Это работает нормально, когда я не создаю Класс Объекта Страницы ... он нажимает на кнопку You безо всякой ошибки, но при использовании POM это не удается.URL-адрес https://huew.co/

Кодовые испытания:

from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait

class HomePage():

    def __init__(self,driver):
        self.driver = driver

    def wait_for_home_page_to_load(self):
        wait =WebDriverWait(self.driver,30)
        wait.until(expected_conditions.visibility_of(self.driver.find_element_by_tag_name('html')))

    def get_you_button(self):

        try:
            element = self.driver.find_element_by_xpath("//div[@class='desktop-public-header']/a[@ng-controller='UserNavigationInteractionCtrl'][6]")

        except:
            return None

1 Ответ

0 голосов
/ 04 февраля 2019

Это сообщение об ошибке ...

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
    
...