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

2024-05-13 05:25:06 发布

您现在位置: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 element(第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()

上面的代码没有产生所需的结果

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

提前谢谢


Tags: div列表inputelementitemlabelclass复选框
1条回答
网友
1楼 · 发布于 2024-05-13 05:25:06

使用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}')]")

相关问题 更多 >