Capybara无法在数据表中选择单选按钮

时间:2017-07-13 19:46:22

标签: ruby-on-rails selenium-webdriver capybara

我有点问题,我试图在数据表数据中选择一个单选按钮。我能够将单个数据表行向下筛选为一个,因此它是唯一出现在页面上的数据...但我已经尝试过 public static class ServicePath{ private Integer index = 0; private String path = null; public ServicePath(Integer index, String path){ this.index = index; this.path = path; } public Integer getIndex() { return index; } public void setIndex(Integer index) { this.index = index; } public String getPath() { return path; } public void setPath(String path) { this.path = path; } } List<ServicePath> servicesPaths = Files.walk(Paths.get(parentFolder)) .map(Path::toString) .map( path -> { for (int i = 0; i < services.size(); i++) if ( path.endsWith(version + ".jar" ) && path.contains( services.get(i) ) ) return new ServicePath(i, path); return null; }) .filter( sp -> sp != null) .collect( Collectors.toList() ); servicesPaths.sort( (sp1, sp2) -> sp1.getIndex().compareTo( sp2.getIndex() ) ); List<String> sortedPaths = servicesPaths.stream().map( sp -> sp.getPath() ).collect( Collectors.toList() ); page.choosepage.find(<xpath>),我我还尝试在某个css选择中做了以前的所有事情,我无法弄清楚还有什么可以尝试。

不幸的是,相关的HTML就在这里,因为这是一个我无法发布所有内容的工作项。但是如果我通过以下方式指定id,我可以点击标签:

page.find(<css>)但实际上这似乎并没有“选择”单选按钮。在过滤数据表结果后,我也尝试过等待

无论如何,这是过滤行后的2个单选按钮的HTML(单选按钮位于列中)

find(:xpath, "//label[@for='approve_row_5']").click

我想过只是通过文本找到跨度并点击它,它通过....但实际上并没有选择单选按钮。此外,我尝试通过<td class=" align-middle"> <div class="radio"> <input type="radio" name="approve_deny_row_5" id="approve_deny_row_5_approve" value="person_approve" data-ui-verify-key="test_approve" data-ui-verify-title="2017-07-13 14:59:46 -0400"> <label for="approve_deny_row_5_approve"> <span>Approve</span> </label> </div> <div class="radio"> <input type="radio" name="approve_deny_row_5" id="approve_deny_row_5_deny" value="person_deny" data-ui-verify-key="test_deny" data-ui-verify-title="2017-07-13 14:59:46 -0400" data-ui-verify-url="/irrelevant/stuff"> <label for="approve_deny_row_5_deny"> <span>Deny</span> </label> </div> </td> 通过特定值选择器进行搜索,但也没有运气

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

假设实际的无线电输入在页面上可见(并且没有隐藏以允许样式化),应该适用于此的方法是

choose("Approve")
choose("Deny")

choose("approve_deny_row_5_approve")
choose("approve_deny_row_5_deny")

如果那些人告诉你他们找不到元素,那么输入元素很可能实际上是隐藏的(出于样式原因)你应该可以使用

choose('Approve', allow_label_click: true)

将单击与输入关联的标签元素而不是输入元素。这应该产生相同的结果(设置单选按钮),除非您正在寻找的行为基于JS寻找对特定元素的点击(而不是输入上的更改事件)。如果恰好是这种情况,那么你需要弄清楚JS正在寻找点击的确切元素,或者修复JS以更直观的方式行事。