Как найти эти элементы флажка в Selenium - PullRequest
1 голос
/ 24 октября 2019

Я не могу найти флажки на этом сайте в Selenium

Я пробовал: Xpath, ID, Type, Actionkeys, Text и частичный текст,Мне удалось отправить ключи (имя пользователя и пароль) и найти элементы user / pass.

  • Код:

  • label for = "acceptTermsAndConditions" class = "checkbox-label-margin"> - # Я принимаю Условия использования

  • xpath - // * [@ id = "loginForm"] /div / div [3] / label 1

Заранее спасибо за помощь, мне кажется, что я хожу по кругу.

1 Ответ

1 голос
/ 24 октября 2019

TL; DR, см. Код с поясняющими комментариями ниже.

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

Еще одна проблема, которую я заметил, просто нажав «Принять условия» с помощью .click(), заключалась в том, что щелчок происходит в серединеэлемента, он открывает Условия использования в отдельной вкладке, что нежелательно. Вы можете обойти это, щелкнув со смещением (0, 0) с помощью Action Chains .

Что касается перехода к флажкам с локаторами селена, это может бытьсделано различными способами. В приведенном ниже коде я использую CSS-селекторы при проверке значения for атрибутов label элементов.

Рабочий код:

from selenium import webdriver
from selenium.webdriver import ActionChains
from selenium.webdriver.common.by import By
from selenium.webdriver.remote.webelement import WebElement
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC


driver = webdriver.Chrome()
driver.get('https://onecall.1100.com.au/au-b4-en/Account/Login')

wait = WebDriverWait(driver, 10)

# wait for the form to get visible
login_form = wait.until(EC.visibility_of_element_located((By.ID, 'loginForm')))

# accept terms
accept_terms = login_form.find_element_by_css_selector('label[for=acceptTermsAndConditions]')
ActionChains(driver).move_to_element_with_offset(accept_terms, 0, 0).click().perform()

# keep me logged in
login_form.find_element_by_css_selector('label[for=checkbox2]').click()

# take a screenshot to prove it is working
login_form.screenshot('form.png')

И это то, что вы увидите в form.png:

enter image description here

...