Python + Selenium: дождаться полной загрузки элемента - PullRequest
0 голосов
/ 22 мая 2018

Итак, я пытался поиграться с функцией в 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

What is 'никаких осложнений.Однако всякий раз, когда я нажимаю «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>

или

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

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

1 Ответ

0 голосов
/ 22 мая 2018

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

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

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

В соответствии с 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')]")))
      
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...