我有一个复选框,需要使用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
答案 0 :(得分:1)
这是您可以执行此操作的一种方法:
driver.execute_script("document.getElementById('diDataCheck').click()")
但是没有知道按钮是否被按下的“安全”方法,因此请记住这一点。如果要确定是否已单击复选框,可以在输入元素上实现change eventHandler。
答案 1 :(得分:0)
根据 HTML ,您已经忽略了复选框是Angular元素,因此要在其上调用click()
,必须引诱< em> 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
答案 2 :(得分:0)
您可以在等待条件下使用此XPath
checkElement = WebDriverWait(driver, 20).until(
EC.element_to_be_clickable((By.XPATH, "//input[@name='Mode' and @type='checkbox']")));
checkElement.click();