Python 如何确定是否单击了角度切换开关?

Python 如何确定是否单击了角度切换开关?,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

我试图使用Selenium和Python工具定义Angular的切换开关是否被单击。 当打开一个新表单时,我的输入id的class
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
    

在尝试了一些选项和更多的研究之后,我发现两个解决方案需要测试,一个是切换/复选框被选中。 首先,使用.is_selected()Selenium的方法:

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听起来不错,让我知道状态。谢谢,我尝试了你的建议,并在研究中找到了一些更好的解决方案。