Python 如何确定是否单击了角度切换开关?
我试图使用Selenium和Python工具定义Angular的切换开关是否被单击。 当打开一个新表单时,我的输入id的classPython 如何确定是否单击了角度切换开关?,python,angular,selenium-webdriver,try-catch,webdriverwait,Python,Angular,Selenium Webdriver,Try Catch,Webdriverwait,我试图使用Selenium和Python工具定义Angular的切换开关是否被单击。 当打开一个新表单时,我的输入id的classng未触及,ng原始有效 单击后,它将变为ng有效ng脏ng触摸。但第三次点击后,一切都没有改变。 单击该类并保存表单后,该类始终保持ng valid ng dirty ng topped,并在任何更改后保持不变(即使禁用切换和保存)。 这不是错误,因为更改保存在服务器端 我应该查看哪个CSS属性来定义所更改的内容? 以下是html代码示例: <div _ngc
ng未触及,ng原始有效
单击后,它将变为ng有效ng脏ng触摸
。但第三次点击后,一切都没有改变。
单击该类并保存表单后,该类始终保持ng valid ng dirty ng topped
,并在任何更改后保持不变(即使禁用切换和保存)。
这不是错误,因为更改保存在服务器端
我应该查看哪个CSS属性来定义所更改的内容?
以下是html代码示例:
<div _ngcontent-c26="" class="form-group">
<label _ngcontent-c26="" for="checked">Checked</label>
<div _ngcontent-c26="" class="toggle-switch">
<input _ngcontent-c26="" id="opened" name="checked" type="checkbox" class="ng-valid ng-dirty ng-touched">
<label _ngcontent-c26="" for="checked"></label>
</div>
<span _ngcontent-c26="" class="form-control-helper"></span>
</div>
选中的
表单状态和输入状态
和
字段的状态
输入字段具有以下状态:
:尚未触及该字段$untouched
:该字段已被触摸$toucted
:该字段尚未修改$pristine
:该字段已被修改$dirty
:字段内容无效$invalid
:字段内容有效$valid
字段的属性,可以是true
或false
表格还具有以下状态:
:尚未修改任何字段$pristine
:一个或多个已修改$dirty
:表单内容无效$invalid
:表单内容有效$valid
:表单已提交$submitted
- 探测ng触摸:
try: WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//input[@id='opened' and @name='checked'][contains(@class, 'ng-touched')]"))) print("Toggle Switch has been touched") except TimeoutException: print("Toggle Switch has not been touched")
- 探测
:ng dirty
try: WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.XPATH, "//input[@id='opened' and @name='checked'][contains(@class, 'ng-dirty')]"))) print("Toggle Switch has been touched") except TimeoutException: print("Toggle Switch has not been touched")
- 注意:您必须添加以下导入:
from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.common.by import By from selenium.webdriver.support import expected_conditions as EC
driver.find_element_by_css_selector("input[type=checkbox]").is_selected()
如果开关处于打开状态,则返回True;如果开关处于关闭状态,则返回False
第二次,我仔细查看了CSS和CSS设置,发现当切换打开时,:checked被添加到其中。因此,您可以对该定位器使用布尔表达式。
选中切换的定位器如下所示:
input[type=checkbox]:checked
对于未选中的:
input[type=checkbox]
此外,还有一个第三个选项,适用于许多情况。例如,如果切换更改其颜色,其属性也会更改。因此,您可以使用:
driver.find_element_by_css_selector("input[type=checkbox]").value_of_css_property("background-color") == "some color"
例如,如果您希望此CSS属性为白色,请将
“#fff”
(白色)放置在此处。感谢您提供如此详细的答案。明天我将尝试这些选项。@vitaliis听起来不错,让我知道状态。谢谢,我尝试了你的建议,并在研究中找到了一些更好的解决方案。