无法点击正在使用水豚的 link

Unable to click link that is having   using Capybara

我找到了 link 的 xpath,但是无法点击 link。

<a href="#" onclick="submitLink("89502", "6022955204"); return false">01 &nbsp; 490508125096</a>

link = bosession.find(:xpath, "//a[contains(.,'490508125096')]").text
puts link 
bosession.click_link link

对于puts link 我的输出为 01 490508125096

至于click_link 我有错误 ElementNotFound : Unable to find link or button "01 490508125096"

是不是link有&nbsp;导致link找不到?

我在其他页面用了同样的方法,我可以点击。

<a href="#" onclick="submitLink("3854"); return false">1234232</a>

link = bosession.find(:xpath, "//a[contains(.,'1234232')]").text
bosession.click_link link

发生这种情况是因为传递给 click_link 的定位器直接与 XPath 中的文档内容进行比较,但是通过获取文本,您实际上获得了如图所示的内容 (2 spaces) vs 实际内容(正常 space,nbsp)。但是,确实没有必要通过您自己的 xpath 找到 link,然后单击从中获得的文本字符串。相反,您可以首先单击子字符串(假设默认配置)

bosession.click_link '490508125096' # will click based on partial string

如果你真的想做完整的字符串你可以做

bosession.click_link "01 \u00a0490508125096", exact: true # \u00a0 for the nbsp

你也可以

bosession.click_link text: "01  490508125096" # could use exact_text: here instead of text: if you want an exact match rather than substring

工作方式略有不同。如前所述,当您传递定位器(只是一个字符串)时,它会通过 XPath 与文档的确切内容进行比较。但是,当您传递 :text 选项时,浏览器会将其与 shown/normalized 文本进行比较。这样做效率有点低,因为它涉及查找页面上的所有 link,获取 "as shown" 文本,然后进行比较。