Python + Selenium: дождитесь полной загрузки элемента

Итак, я пытался поиграть с функцией в Selenium, которая называется:

wait = WebDriverWait(browser, 20).wait.until(EC.element_to_be_clickable((By.XPATH, '//*[@id="accountStandalone"]/div/div/div[2]/div/div/div[1]/button')))
wait.click()

Прежде чем я начну говорить о проблеме. То, что я пытаюсь сделать с помощью Selenium, - это в основном создать Selenium, который автоматически пишет в форум, как показано на этой картинке:

Pic1

В этом нет никаких сложностей. Однако всякий раз, когда я нажимаю "Skapa Konto", он загружается и ждет, пока не появится новая страница:

Pic2

Это изображение выше. Я считаю, что я хочу, чтобы он подождал, пока не выдаст мне эту «картинку» (это та же ссылка, поэтому она не вносит никаких изменений), поэтому я полагаю, что лучше подождать, пока не появится текст и т. Д. "FORTSÄTT или ПРИВЕТ »- это браузер. Тогда продолжай.

Однако при использовании этого у меня возникла проблема. Причина в том, что он не ждет, пока его найдут, а мгновенно запускает и выполняет другие действия, которых не следовало бы. Прямо сейчас он просто пропускает ожидание, как будто функция не работает или вообще есть. Что я сделал не так?


Обновлять:

Что я знаю, так это то, что всякий раз, когда я пытаюсь зарегистрироваться на веб-сайте, веб-сайт не меняется, что означает, что он переводит меня на новую страницу, когда это была успешная учетная запись. Но он выполняет автоматическое обновление и сообщает, что оно было успешным. Это означает, что каким-то образом я хочу сделать что-то таким, чтобы он проверял и видел, произошло ли что-то новое со страницей. Если нет, подождите еще раз и попробуйте еще раз? ... Что-то в этом роде?

Что бы я сделал, это и т. Д. Проверьте, есть ли:

<div class="confirmation-title nsg-font-family--platform nsg-text--black edf-title-font-size--xlarge js-confirmationTitle">NU ÄR DU MEDLEM, Hello.</div>

or

<button type="button" class="nsg-button nsg-bg--black register-next-step-cta js-nextStepCta">FORTSÄTT</button>

Однако проблема в том, как я уже сказал, всякий раз, когда я нажимаю «SKAPA KONTO» - он просто ждет, пока сервер дважды проверит, а затем автоматически обновляет страницу и сообщает об успешном.


person CDNthe2nd    schedule 22.05.2018    source источник
comment
Можете ли вы удалить .wait после WebDriverWait и попробовать. Согласно официальной документации, это должно быть element = WebDriverWait (ff, 10) .until (EC.presence_of_element_located ((By.ID, myDynamicElement)))   -  person Satish    schedule 22.05.2018
comment
@ CDNthe2nd Похоже, вы стали жертвой хрупкого абсолютного xpath. Добавьте в вопрос соответствующий HTML   -  person DebanjanB    schedule 22.05.2018
comment
Не сработало @Satish - я обновлю свой вопрос через несколько минут для вас обоих!   -  person CDNthe2nd    schedule 22.05.2018
comment
Выполнено! @DebanjanB! Надеюсь, я правильно сделал или что-то вы имели в виду!   -  person CDNthe2nd    schedule 22.05.2018


Ответы (1)


Прежде всего, я твердо уверен, что вы были довольно близки. Вам просто нужно отформатировать свой код в Pythonic, который может сразу решить вашу проблему следующим образом:

WebDriverWait(browser, 20).until(EC.element_to_be_clickable((By.XPATH, '//*[@id="accountStandalone"]/div/div/div[2]/div/div/div[1]/button'))).click()

Вы замолчали реальную проблему, упомянув , что она не ждет, пока она найдет, а сразу срабатывает и делает другие вещи, которые не должны, вместо того, чтобы упоминать, что должна делать ваша программа (например, ваши испытания кода) и что не так ваша программа делает (например, трассировка стека ошибок).

Согласно HTML, которым вы поделились, вы можете вызвать официанта для любого из WebElements следующим образом:

  • Официант видимости текста NU ÄR DU MEDLEM, Здравствуйте.:

    • CSS_SELECTOR:

      WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, "div.confirmation-title.nsg-font-family--platform.nsg-text--black.edf-title-font-size--xlarge.js-confirmationTitle")))
      
    • XPATH:

      WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//div[@class='confirmation-title nsg-font-family--platform nsg-text--black edf-title-font-size--xlarge js-confirmationTitle' and contains(.,'NU ÄR DU MEDLEM, Hello.')]")))
      
  • Официант кнопки с текстом FORTSÄTT:

    • CSS_SELECTOR:

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "button.nsg-button.nsg-bg--black.register-next-step-cta.js-nextStepCta")))
      
    • XPATH:

      WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//button[@class='nsg-button nsg-bg--black register-next-step-cta js-nextStepCta' and contains(.,'FORTSÄTT')]")))
      
person DebanjanB    schedule 22.05.2018
comment
Ооо, мы идем! Да, это действительно помогло! Теперь он делает то, чего я хотел. Я действительно ценю это и не могу отблагодарить вас более чем достаточно! - person CDNthe2nd; 22.05.2018
comment
@ CDNthe2nd Не стесняйтесь рисовать в проекте «Сказать спасибо». :) - person DebanjanB; 22.05.2018