元素不可见Selenium capybara

时间:2017-09-15 23:24:41

标签: selenium selenium-webdriver capybara selenium-chromedriver

enter image description here我在执行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']"

2 个答案:

答案 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