【问题标题】:How to select checkbox by name如何按名称选择复选框
【发布时间】:2021-07-19 16:07:49
【问题描述】:

我正在努力为我的复选框获取正确的 css(或任何其他)定位器。页面上有两个具有相同属性的不同文本,我不知道如何构建工作选择器。我想避免使用索引。我想通过'Name1' 和'Name2' 选择它们 以下是属性:

<label>
<input class="some class name" name="checkOptions" type="checkbox">Name1
</label>

<label>
<input class="some class name" name="checkOptions" type="checkbox">Name2
</label>

【问题讨论】:

  • '用不同的名字' --> 他们有相同的名字吗?
  • 对不起,我的意思是“显示的文本”,而不是属性“名称”(已更正)
  • 可能是这样的:“(//input[text()='Name1'])”
  • 如果你可以使用脚本,它可能是[...document.querySelectorAll("label")] .filter(label =&gt; label.textContent.trim() === "Name2")[0] .querySelector("input").checked = true

标签: html css selenium


【解决方案1】:

在您的示例中,文本位于标签内(...和外部输入...)。

好吧,可能的替代方法是使用 css ":contains" 选择器

  $("label:contains('Name1')").css('background-color', 'red');

获取输入:

  $("label:contains('Name1') > input")

请考虑此本机函数区分大小写。 Alternative可以创建自定义函数:

$.expr[':'].containsCaseIns = function(a, i, m) {
  return $(a).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0;
};

$("label:containsCaseIns('Name1') > input")

【讨论】:

    【解决方案2】:

    如果元素的唯一唯一性是它们的文本,您必须根据该文本定位它们。
    试试这个xpath://input[contains(text(),'Name1')] 作为第一个元素,//input[contains(text(),'Name2')] 作为第二个元素。
    如果您需要添加更多唯一性,您可以添加类名或任何其他属性,如下所示:
    //input[@class='some class name' and contains(text(),'Name1')] 和
    //input[@class='some class name' and contains(text(),'Name2')]

    【讨论】:

    • 这个没有返回任何定位器,NoSuchElementException
    • 你尝试了什么xpath?您确定“Name1”是文本而不是值吗?在搜索元素之前你是否给了足够的延迟?
    • 另外,我希望您使用正确的By,即driver.findElements(By.xpath(//input[contains(text(),'Name1')]));
    猜你喜欢
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 2015-07-14
    • 2021-10-10
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    相关资源
    最近更新 更多