Условное утверждение в селене, если элемент не существует - PullRequest
2 голосов
/ 11 мая 2019

Я хочу проверить

def first_page_error:

- если элемент не существует "break" и двигаться дальше с помощью скрипта

--if элементсуществует, затем обновите страницу

-Если элемент перестанет существовать после запуска обновления firstPage ()

Буду признателен за любую помощь в изучении python:)

Мой код прямо сейчас

def first_page_error():
        cap_error = driver.find_element_by_xpath('//*[@id="js-register-with-email"]/div[2]')
        while True:
            try:
                cap_error
            except NoSuchElementException:
                break
            else:
                time.sleep(5)
                driver.refresh()

    def firstPage():
        element = driver.find_element_by_xpath('//*[@id="sign-up-link"]')
        driver.execute_script("arguments[0].click();", element)

        emailInput = driver.find_element_by_xpath('//*[@id="register-email"]')
        emailInput.send_keys(emails[0])

        condInput = driver.find_element_by_xpath('//*[@id="register-terms"]')
        condInput.click()

    firstPage()
    first_page_error()

1 Ответ

2 голосов
/ 11 мая 2019

Несколько замечаний ...

  1. Если вы автоматизируете пользовательские сценарии, избегайте использования JS-кликов.Пользователь не может щелкнуть элемент, который не виден, скрыт или находится за пределами экрана и т. Д. Selenium был разработан, чтобы действовать как пользователь и выдавать ошибки, когда пользователь не может щелкнуть элемент.Это хорошая вещь.Это поможет вам найти проблемы и решить их, как пользователь.

  2. Предпочитать идентификаторы и селекторы CSS.Они быстрее, лучше поддерживаются и так далее.В интернете много информации, если вам нужно больше объяснений.Я преобразовал ваши XPath, которые только что идентифицировались по идентификатору, в * _by_id ().

  3. Проверьте наличие, используя driver.find_elements_ * (обратите внимание на множественное число, elementS), и проверьте длину элементаколлекция

Я бы написал что-то вроде ниже.

def first_page_error():
    return len(driver.find_elements_by_xpath('//*[@id="js-register-with-email"]/div[2]')) > 0

def firstPage():
    driver.find_element_by_id('sign-up-link').click()
    driver.find_element_by_id('register-email').send_keys(emails[0])
    driver.find_element_by_id('register-terms').click()

firstPage()
if first_page_error():
    driver.refresh()
    if first_page_error():
        firstPage()
# move on with the script
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...