Как установить флажок в соответствии с HTML, используя Selenium WebDriver в Python - PullRequest
0 голосов
/ 31 августа 2018

У меня есть флажок, который мне нужно выбрать с помощью Selenium. Ниже HTML:

<input id="diDataCheck" ng-model="$parent.DIDATA.IsSet" name="Mode" type="checkbox" class="ng-pristine ng-untouched ng-valid ng-empty" xpath="1">

Я попытался получить к нему доступ с помощью id или name и даже с XPath, но, похоже, он не работает.

CHECKBOX = (By.XPATH, ".//*[contains(text(), 'diDataCheck')]""") # using XPATH
CHECKBOX = (By.ID, "diDataCheck") # using id
CHECKBOX = (By.NAME, "Mode") # using name

Я использую выше как:

WebDriverWait(driver, 20).until(EC.element_to_be_clickable(CHECKBOX)).click()

Я также поместил вышеуказанную строку в try except, но ничего не получил в Exception message.

Когда я изменил WebDriverWait() на:

driver.find_element_by_id("diDataCheck").click()

Я получил исключение как:

Message: element not visible

Ответы [ 3 ]

0 голосов
/ 31 августа 2018

Вот один из способов сделать это:

driver.execute_script("document.getElementById('diDataCheck').click()")

Но не существует «безопасного» способа узнать, была ли нажата кнопка, так что имейте это в виду. Вы можете реализовать change eventHandler на элементе input, если хотите точно знать, был ли установлен флажок.

0 голосов
/ 31 августа 2018

Вы можете использовать этот XPath с условием ожидания

checkElement = WebDriverWait(driver, 20).until(
EC.element_to_be_clickable((By.XPATH, "//input[@name='Mode' and  @type='checkbox']")));

checkElement.click();
0 голосов
/ 31 августа 2018

В соответствии с HTML , установленным вами, флажок является элементом Angular , поэтому для вызова click() на нем необходимо вызвать WebDriverWait для желаемого элемента , который можно кликать , и вы можете использовать любое из следующих решений:

  • CSS_SELECTOR

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.CSS_SELECTOR, "input.ng-pristine.ng-untouched.ng-valid.ng-empty#diDataCheck[name='Mode']"))).click()
    
  • XPATH:

    WebDriverWait(driver, 20).until(EC.element_to_be_clickable((By.XPATH, "//input[@class='ng-pristine ng-untouched ng-valid ng-empty' and @id='diDataCheck'][@name='Mode']"))).click()
    

Примечание : Вы должны добавить следующий импорт:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
...