【发布时间】:2015-05-04 14:34:12
【问题描述】:
我正在使用Site_Prism/Capybara 来实现自动化UI testing。由于我找不到任何 Capybara 滚动网页的方法,因此我正在执行 jscript,它为我完成了这项工作。
这两行对我来说做得不错:
page.execute_script ("document.getElementsByTagName('h4')[4].scrollIntoView();")
和
page.execute_script ($("h5:contains(' Information')")[0].scrollIntoView();)
但我想进行更强大的搜索,只包含我想要滚动到的文本。为此,我想在 jscript 中使用 Xpath。
这一行在 Chrome 控制台中运行良好:
$x("//*[contains(text(), ' Information')]")[0].scrollIntoView();
但是,当我尝试在 Capybara 中执行它时,当我执行其他 jscripts 时,如下所示:
page.execute_script ("$x(\"//*[contains(text(), '4. Conditions')]\")[0].scrollIntoView();")
我总是出错:
未知错误:$x 未定义 (会话信息:chrome=42.0.2311.135) (驱动信息:chromedriver=2.14.313457 (3d645c400edf2e2c500566c9aa096063e707c9cf),platform=Linux 3.13.0-37-generic x86_64) (Selenium::WebDriver::Error::UnknownError)
这里有什么问题? 我不能在 Capybara 执行的 jscript 中使用 Xpaths 吗?
有人可以帮忙吗?
提前致谢!
【问题讨论】:
-
你在哪里定义
$x? -
你知道
$x是 chrome 添加到开发控制台的东西,它不是 JavaScript 的一部分吗? -
谢谢!我不知道 $x 是 chrome 添加到开发控制台的东西,它不是 JavaScript 的一部分。你对如何解决这个问题有什么建议吗? JavaScript中包含的任何其他方式?顺便说一句,我在 Chrome 中执行过这个脚本,也就是我目前使用 Chrome 进行测试,但我也想在其他浏览器上运行这些测试,所以答案非常有用。
-
如果你有 jquery,也许你可以这样做: $('div:contains("Information")')[0].scrollIntoView();如果您还没有这样做,那么增大浏览器窗口可能也是一个好主意。然后你可以避免滚动。
-
好吧
div:contains没有做这项工作,因为它返回页面的整个部分,所以它滚动页面的错误部分。搜索需要找到 DOM 树中包含文本的最后一个元素。
标签: javascript xpath capybara