如何解决使用 Cucumber、Selenium 和 Capybara 进行测试时,是否有一种简单的方法可以遍历嵌套的 Shadow DOM?
我正在尝试为应用程序的前端 UI 编写自动化测试,该应用程序具有很多嵌套的 shadow-dom,但我无法使用 Capybara、Cucumber 和 Selenium(使用 chromedriver)访问它们。该应用程序正在使用 AWS Amplify Authenticator 。当我尝试查找输入元素时,我不断收到以下错误:
Unable to find css "input[id$='username']" (Capybara::ElementNotFound)
这是我测试的样子:
When('I type into the username field my {string}') do |string| find("input[id$='username']").set(string) end
我在其他帖子中读到 chrome 驱动程序支持 shadow-doms,但不确定在这种情况下如何处理
解决方法
目前你需要使用 evaluate_script
来访问 shadow-dom - 比如
element = find(...) # find element that contains shadow dom
shadow_root = @session.evaluate_script(<<~JS,element)
(function(root){
return root.shadowRoot;
})(arguments[0])
JS
shadow_root.find("input[id$='username']")
然后你只能在 shadow DOM 上使用基于 CSS 的查找器/操作/等。
WebDriver 规范已更新,以提供对 shadow dom 的更多支持,但尚未在驱动程序中实现 - https://w3c.github.io/webdriver/#shadow-root
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。