如果未在 Selenium 中选中,请选中复选框 Python

Check a Checkbox if it is not checked in Selenium Python

我有下面的页面来源:

1. <li_ngcontent-shv-c123 mat-menu-item role="presentation" class="mat-focus-indicator dropdown-item mat-menu-item ng-star-inserted" tabindex="0" aria-disabled="false">
2. <mat-checkbox_ngcontent-shv-c123 class= "mat-checkbox example-margin mat-accent _mat-animation-noopable" id="53oo32be-6855-4yt4-965d-y71078b642">
3. <label class="mat-checkbox-layout" for="53oo32be-6855-4yt4-965d-y71078b642-input"> 
4. <div class="mat-checkbox-inner-container">.
5. <input type="checkbox" class="mat-checkbox-input cdk-visually-hidden" id="53oo32be-6855-4yt4-965d-y71078b642-input" tabindex="0" value="53oo32be-6855-4yt4-965d-y71078b642" name="Item List" aria-checked="true"> 
6. <div matripple="" class="mat-ripple mat-checkbox-ripple mat-focus-indicator">
7.  <div class="mat-ripple-element mat-checkbox-persistent-ripple">
8. </div>
9. </div>
10. <div class="mat-checkbox-frame">
11. </div>
12. <div class="mat-checkbox-background">
13. <svg version="1.1" focusable="false" viewBox="0 0 31 31" xml:space="preserve" class="mat-checkbox-checkmark">
14.  <path fill="none" stroke="white" d="M2.1,89.5 9,78.6 3.3,77.1" class="mat-checkbox-checkmark-path">
15. </Path>
16. </svg><div class="mat-checkbox-mixedmark">
17. </div>
18. </div>
19. </div>
20. <span class="mat-checkbox-label">
21. <span style="display none;">&nbsp;</span>XYZ Element</span>
22. </label> 
23. </mat-checkbox><div matripple="" class="mat-ripple mat-menu-ripple">
24. </div>
25. </li>

在此项目列表中(第 5 行)是一个下拉列表,其中包含有限数量的带复选框的元素。 我需要检查的是下拉列表中的元素 XYZ 元素(第 21 行),当且仅当未选中该复选框时,才选中该复选框。

如果该复选框已被选中,请保留它。

我尝试使用以下代码:

test= "//span[contains(text(),'XYZ Element')]"

try:

driver.finde_element_by_xpath(test).is_selected()
pass

except:
driver.find_element_by_xpath(test).click()

以上代码没有产生要求的结果。

有没有其他方法可以做到这一点?

提前致谢。

使用find_elements查看列表中是否有任何内容,如果有,您可以点击或检查是否点击如下:

代码:

try:
    if len(driver.find_elements_by_xpath("//span[contains(text(),'XYZ Element')]/../descendant::input")) > 0 :
        print("Element is present")
        if driver.find_element_by_xpath("//span[contains(text(),'XYZ Element')]/../descendant::input").is_selected():
            print("it's already selected")
        else:
            driver.find_element_by_xpath("//span[contains(text(),'XYZ Element')]/../descendant::input").click()
    else:
        print("Element is not present at all")
except:
    print("Check out the code again")
    pass

更新 1:

使xyz element变量:

some_str = "XYZ Element"
driver.find_element_by_xpath(f"//span[contains(text(),'{some_str}')]")