如何解决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"
)
'//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 举报,一经查实,本站将立刻删除。