首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何定位复选框以使用Selenium和Python验证其状态

如何定位复选框以使用Selenium和Python验证其状态
EN

Stack Overflow用户
提问于 2021-11-04 01:36:44
回答 3查看 960关注 0票数 1

我试图找出我们网站上的复选框是否处于选中状态。复选框的HTML如下所示:

代码语言:javascript
复制
<input id="ID_StaffIsRostered" name="ID_Rostering" type="checkbox" checked="" data-toggle="toggle" data-onstyle="success" data-size="sm" data-on="Yes" data-off="No" onchange="toggleRosteredStaff()">

我试着通过这些定位器找到这个:

  1. (By.ID, "ID_StaffIsRostered")
  2. (By.XPATH, "input[@name='ID_Rostering']"
  3. (By.XPATH,"//*[@id='ID_StaffIsRostered']")
  4. (By.XPATH,"/html/body/div[1]/div/div[2]/div/div/div/div[2]/table[3]/tbody/tr/td/div[1]/div[2]/div/form/div/div[1]/div/label/div/input")
  5. (By.CSS_SELECTOR,"label:nth-child(1) > .btn-light .toggle-off")
  6. (By.XPATH,"//form[@id='ID_Form_Rostering']/div/div/div/label/div/div/label[2]")
  7. (By.XPATH,"//div/div/div/label/div/div/label[2]")

到目前为止,一切都不起作用。但是,我可以选择包含复选框的div,以及复选框之间切换的标签,这取决于它切换到的是什么,HTML是:

代码语言:javascript
复制
<div class="toggle btn btn-success btn-sm" data-toggle="toggle" style="width: 7.5px; height: 26px; min-width: 38px;">

至于标签:

代码语言:javascript
复制
<div class="toggle-group"><label class="btn btn-success btn-sm toggle-on">Yes</label><label class="btn btn-light btn-sm toggle-off">No</label><span class="toggle-handle btn btn-light btn-sm"></span></div>

有什么其他方法可以让我做到这一点呢?目前我使用的是Selenium 4.0.0和Python3.9

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-11-05 11:53:01

根据布尔属性的HTML规范

许多属性是布尔属性。元素上存在一个布尔属性表示真值,而缺少该属性则表示虚值。 如果属性存在,则其值必须是空字符串,或者是对属性的规范名称不区分大小写的ASCII值,没有前导或尾随空格。

选中的属性可以用以下两种方式中的一种表示:

代码语言:javascript
复制
<input name=name id=id type=checkbox checked>
<input name=name id=id type=checkbox checked="">
<input name=name id=id type=checkbox checked="checked">

解决方案

要验证复选框的状态,可以探测checked属性,并且可以使用以下代码块:

代码语言:javascript
复制
try:
  WebDriverWait(browser, 20).until(EC.presence_of_element_located((By.CSS_SELECTOR, "input#ID_StaffIsRostered[name='ID_Rostering'][checked]")))
  print("Checkbox is in checked state")
except:
  print("Checkbox is in unchecked state")
票数 0
EN

Stack Overflow用户

发布于 2021-11-04 01:53:28

  1. 复选框的选中参数将指示是否选中该参数,您可以通过xpath(./ not @ checked )获取该参数的状态。
  2. 仔细观察网站的法律,复选框是否有任何特殊的状态,如颜色、文本等。
票数 0
EN

Stack Overflow用户

发布于 2021-11-04 02:00:24

我有办法想办法。

代码语言:javascript
复制
element.get_attribute('checked')

也可以查询javascript。

代码语言:javascript
复制
return document.querySelector('input[name="ID_Rostering"]').checked;

至于尝试xpath,但它并不总是可靠的。

代码语言:javascript
复制
//input[@type='checkbox' and not(@checked)]

因为没有检查

代码语言:javascript
复制
//input[@type='checkbox' and @checked)]

供核对

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69833601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档