Capybara从正常表达的下拉菜单中选择?

时间:2012-12-03 23:51:54

标签: regex select drop-down-menu capybara

我正在尝试用Capybara抓取一个网页,这个工作正常,但我在某个页面遇到问题。它有一个使用以下HTML定义的下拉列表:

<select onChange="this.form.submit();" id="AcctNumber" name="AcctNum">
<option value="MU:P2" selected="true">Investment &nbsp;-&nbsp;2845</option>
<option value="MU:P0">Patrick UGMA&nbsp;-&nbsp;1585</option>
<option value="MU:P1">Lisa UGMA&nbsp;-&nbsp;1655</option>

我曾尝试在此主题中选择包含多种变体的值

selector = 'Investment - 2845'
selector = 'Investment &nbsp;-&nbsp; 2845'
selector = 'Investment    &nbsp;-&nbsp;   2845'
select selector, :from => "AcctNumber"

所有这些(以及更多)产生ElementNotFound错误。

有没有办法只使用正则表达式,比如说/Invest//Pat//Lisa/ 选择项目?这肯定比猜测文字字符串会更容易 匹配这些连字符周围的神秘空白。

1 个答案:

答案 0 :(得分:0)

您的问题可能是 连字符周围没有空格。 &nbsp;在浏览器中呈现时是一个不间断的空格字符 - 但是当被屏幕抓取器读取时,它是6个字符。 “&nbsp;”。

这意味着当您尝试将其与屏幕抓取器匹配时,您应该尝试匹配HTML,而不是渲染版本。

我从你的cut'n'paste中注意到的第二件事是它们周围有标签字符。 RegEx中的选项卡和空格都使用\s选择器进行匹配。

尝试使用此RegEx作为开头:

(Investment|Patrick|Lisa)[\s]*(&nbsp;)[-](&nbsp;)[\s]*[0-9](,4)

这首先匹配单词“投资”或“帕特里克”或“丽莎” - 然后任意数量的空白(空格,制表符等) - 然后文字“”,短划线,文字“”再次,任何数量的空格,然后4位数字0-9。

注意: 我还没有测试过此RegEx。但是,它应该为您提供一个良好的构建起点。如果您需要更多帮助来调整它,我建议Regular-Expressions.info