微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Minitest / Capybara下拉菜单定位器问题

如何解决Minitest / Capybara下拉菜单定位器问题

我试图分别选择四个下拉菜单,如下所示:

find(:xpath,'//select[@id = 'homework_filter_program_id']/option[1]').click_on

find(:xpath,'//select[@id = 'homework_filter_lesson_id']/option[1]').select_option

find(:xpath,'//select[@id = 'homework_filter_unit_id']/option[1]').select_option

find(:xpath,'//select[@id = 'homework_filter_difficulty_level_id']/option[1]').select_option

我尝试了click_on和select_option进行选择。

我从这一部分派生了定位器。 enter image description here

但是我得到这些错误

block in require
中 在load_dependency
<top (required)>

我的XPath中有什么不对的地方,它不会被选中。我是Minitest和Ruby的新手。

我还打开了有关下拉菜单CSS选择器的建议。

解决方法

正如Paul指出的那样,您的引号无效,但除此之外,这里不需要XPath。 CSS易于阅读,并且在可以使用元素时通常更有效地定位元素。类似于

find('select#homework_filter_lesson_id option:first-child').select_option

应该可以工作(假设选择实际上在页面上可见)。甚至更容易做

select('text of the first option',from: 'homework_filter_lesson_id')
,

构建xpath定位器字符串(您将其作为第二个参数传递给find)似乎存在问题。

'//select[@id = 'homework_filter_program_id']/option[1]'

这不是有效的红宝石代码。


您要寻找的是字符串插值。有两种常用的方法:

"//select[@id = #{homework_filter_program_id}]/option[1]"

请注意字符串中的#{}表达式。表达式的结果被插值。请记住,这仅适用于双引号字符串("like this one"

或使用string formatting

'//select[@id = %s]/option[1]' % homework_filter_program_id

请注意%s占位符。这非常类似于sprintf


更新:由于某些原因,当我阅读您的示例时,我发现您有名为homework_filter_program_id等的局部变量。现在,我还查看了屏幕截图,我意识到homework_filter_program_id实际上是您要查找的元素的id

一旦您删除了不必要的引号,您的代码很可能就会起作用:

'//select[@id=homework_filter_program_id]/option[1]'

但是您可能仍想对这个定位符进行参数化,这就是插值建议会派上用场的时候。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。