【问题标题】:Capybara select from dropdown with regular expression?Capybara使用正则表达式从下拉列表中选择?
【发布时间】:2012-11-21 13:08:28
【问题描述】:

我正在尝试使用 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/ 到 选择项目?这肯定比试图猜测文字字符串会更容易 匹配那些连字符周围的神秘空白。

【问题讨论】:

    标签: regex select drop-down-menu capybara


    【解决方案1】:

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

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

    我从你的剪切粘贴中注意到的第二件事是它们周围有制表符。在 RegEx 中,制表符和空格都使用 \s 选择器进行匹配。

    试试这个 RegEx 作为开始:

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

    首先匹配单词“Investment”或“Patrick”或“Lisa” - 然后是任意数量的空格(空格、制表符等) - 然后是文字“ ”、破折号、文字“ ” , 任意数量的空格,然后是 4 位 0-9。

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

    【讨论】:

    • 谢谢,特洛伊。我的问题更基本。我可以在 select 方法的第一个参数中使用正则表达式代替字符串吗?而且我只想选择一种可能性,所以 /Investment/ 应该可以工作,但我仍然得到 ElementNotFound。
    • 嗯 - 我对 Capybara 不是特别熟悉 - 所以我不确定它的来源。是否可以让 Capybara 调用客户端脚本?还是使用 jQuery 类型的选择器?
    • 是的。好主意,虽然我对 jQuery 一无所知。
    猜你喜欢
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多