【发布时间】:2013-09-14 14:17:37
【问题描述】:
我对 Java 和 Selenium 比对 Ruby、Capybara 和 SitePrism 更熟悉,所以如果这个问题比较厚,请见谅。
Selenium 有一个非常有用的类来管理 Select 标签,Selenium::WebDriver::Support::Select,可以通过将代表选择的 Selenium 元素 (Selenium::WebDriver::Element) 传递给它来创建它。我想得到一个 Select 对象,这样我就可以使用它方便的方法。
但是,使用 SitePrism 和 Capybara,定义元素的标准方法使我可以访问由 Capybara 的 Element 类 Capybara::Node::Element 建模的选择,我似乎无法找到一种简单的方法来从中提取底层 Selenium 元素水豚元素。
我四处寻找替代方案,发现 Capybara 的 #select 方法,但这对我来说似乎非常有限,因为它看起来迫使您按值选择,并且用于定义页面上的选择的参数非常狭窄。
有没有一种从 SitePrism/Capybara 创建 Selenium Select 的简单方法?还是有更好的方法来完全做到这一点?谢谢!
【问题讨论】:
-
你能分享一下你正在使用的代码吗?
-
@Babai 好吧,上面链接的 Select 类提供了 #select_by 方法,它接受 how 和 what 作为参数。这意味着使用 Selenium Select,您可以使用其值、文本或索引来选择一个选项。而且由于您使用的 Select 是从任何元素创建的,因此您可以以任何您喜欢的方式定位所述元素 - 例如,使用 CSS 选择器(我的首选方法)或 XPath。 Capybara 的 #select 方法只允许您按值选择选项,并强制您仅按 id/name/label 识别选择。抱歉,我不确定哪种代码示例在这里有用。
-
我认为你可以使用标准的 Capybara 方法做你想做的事。例如,您可以使用
page.find(:css, 'option[value="1"]').select_option通过 css 选择一个选项。
标签: ruby selenium webdriver capybara site-prism