ruby - 使用 Ruby Watir,如何选择 ID 不断变化的复选框?

标签 ruby salesforce watir

这是我正在使用的 HTML:

<div class="pbSubsection">
    <table class="detailList" cellspacing="0" cellpadding="0" border="0">
        <tbody>
            <tr>
                <td class="labelCol">
                    <label for="00Ni0000003bw8O">Becomes Asset</label>
                </td>
                <td class="dataCol col02">
                    <input id="00Ni0000003bw8O" type="checkbox" value="1" tabindex="8" name="00Ni0000003bw8O" checked="checked">
                </td>

我需要选中复选框。

我无法使用 ID,因为我在多个组织中执行此操作,并且每个组织的 ID 都不同。有没有一种方法可以通过标签文本或标签索引进行选择?

最佳答案

通过标签文本而不是 tabindex 获取复选框可能更安全。

解决方案 1 - :label 定位器:

如果您使用 watir-webdriver,则可以直接根据标签文本定位元素 - 通过 :label 定位器。您可以执行以下操作:

#Exact match of label text:
b.checkbox(:label => 'Becomes Asset').set

#Partial match of label text using regex:
b.checkbox(:label => /Asset/).set

请注意,这假定标签的“for”属性与输入元素的“id”属性相匹配。

解决方案 2 - 将标签匹配到输入:

对于适用于 watir-classic(以及 watir-webdriver)的解决方案,您可以:

  1. 通过文本获取label元素
  2. 获取label元素的for属性
  3. 通过 id 获取关联的复选框,该 id 与 label 元素的 for 属性相匹配

以下内容适用于您的页面以清除复选框:

label = browser.label(:text => 'Becomes Asset')
browser.checkbox(:id => label.for).set

关于ruby - 使用 Ruby Watir,如何选择 ID 不断变化的复选框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16678268/

相关文章:

selenium - Docker 容器中的 Firefox 可从另一个容器中的 selenium 访问

ruby-on-rails - 你可以将自己传递给 rails 中的 lambda 吗?

ruby - 在 Ruby 语言中,如何获取字符串中的行数?

c# - 将 SalesForce 日历与 Google 日历同步

javascript - 如何获取代理对象内容?

testing - 如何避免在测试期间收到 "Too many future calls"?

ruby-on-rails - 在 Bootstrap 弹出框内使用 Watir .click

ruby-on-rails - 在 Rails 的 URL 中将 "%20"替换为 "-"

java - 以编程方式搜索博客、论坛、新闻站点

ruby - 在 ruby​​/watir webdriver 中使用正则表达式的语法