我在执行capybara命令时遇到错误, 有趣的是同样的XPath没有给出任何错误,我期待XPath存在。 但是当我试图点击那个XPath时,它会抛出错误。
-------------- ----------------代码
然后(/ ^我点击"([^"] )"在"([^"] )" $ /)do | child,parent |
in(:xpath," .// div / span [@class =' folder-nav-tree-fileroom' and text()=' DND-IndexTwistyExpClps&#39 ;] /../../../../.." ;;等等:5)做
find(:xpath, ".//span[contains(text(), '1 IndexTwistyLevel1')]/../../../span[@class='ui-tree-toggler fa fa-fw fa-caret-right']", wait:5).click
端
端
Error : Capybara::ElementNotFound: Unable to find visible xpath "//div[.//span[contains(text(), '1 IndexTwistyLevel1')]]/span[@class='ui-tree-toggler fa fa-fw fa-caret-right']"
答案 0 :(得分:1)
您的代码存在许多问题,这些问题表明它实际上无法像您声称的那样工作。如果您修复代码并提供HTML片段,它应该匹配,我们可以缩小完成问题,但目前错误是:
首先,您有不匹配/未转义
在你的XPath表达式中(不能有inside a string surrounded by
s,所以很明显你没有复制/粘贴你的实际代码)
其次,::after
无效XPath - ::after
伪元素纯粹是CSS,无法从XPath访问,因此在您的选择器中包含该元素并不会给出预期的结果。这会导致Chrome引发无效的选择器错误。
第三,如果没有使用.
启动您的选择器,那么您将完全击败within
范围块 - 请参阅https://github.com/teamcapybara/capybara#beware-the-xpath--trap
最后,在您要点击的元素上使用visible: false
毫无意义,因为您无法点击页面上未显示的元素。
不幸的是,由于您提供的代码无效,很难分辨哪些可能导致您的实际问题(如果有)。
答案 1 :(得分:0)
within(:xpath, config['documents_obj']['FRChildTreeXpath'].sub('TEXT', parent), wait:5) do
elem = find(:xpath, config['documents_obj']['childTwistyXpath'].sub('TEXT', child), visible:false, wait:5).native
page.driver.browser.action.click(elem).perform
为了避免我所得到的错误,我是否使用了水豚动作建设者, 获取原生元素然后执行操作。
在我的案例中它完美无缺。
参考:https://seleniumhq.github.io/selenium/docs/api/rb/Selenium/WebDriver/ActionBuilder.html