我是使用cucumber和selenium-webdriver进行Ruby自动化测试的新手。我从另一个人那里得到了自动化的源代码。他在页面上查找元素的方式看起来像这样: element(:error_message) {browser.elements(browser.elements:'input-invalidate') }
现在我需要访问ShadowRoot中的元素,做了一些研究,但是没有得到Ruby代码的答案。下面的图片是一个例子,我想在阴影根目录中获得带有id="maincontainer“的div标签,有谁能帮忙吗?
谢谢你

发布于 2021-12-01 15:48:04
Selenium 4.0现在支持这一点,下面是一个工作示例:
driver.get('http://watir.com/examples/shadow_dom.html')
shadow_host = driver.find_element(id: 'shadow_host')
shadow_root = shadow_host.shadow_root
shadow_content = shadow_root.find_element(id: 'shadow_content')发布于 2022-01-03 02:38:12
还要验证您是否安装了selenium devtools gem,以及是否至少安装了具有最新chromedriver的chrome v96
这就像提图斯在用硒定位元素时指出的那样工作
browser = Watir::Browser.new
browser.goto "http://watir.com/examples/shadow_dom.html"
shadow_host = browser.driver.find_element(id: 'shadow_host')
shadow_root = shadow_host.shadow_root
shadow_content = shadow_root.find_element(id: 'shadow_content')您还可以使用Watir定位元素,然后在底层Selenium元素上调用shadow_root
shadow_host = browser.div(id: 'shadow_host') #Watir::Div
shadow_root = shadow_host.wd.shadow_root编辑:这在理论上也应该是可行的--将ShadowRoot转换成Watir元素,但之后就会中断。
browser.goto "http://watir.com/examples/shadow_dom.html"
shadow_host = browser.div(id: 'shadow_host') #Watir::Div
shadow_root = shadow_host.wd.shadow_root #Selenium::WebDriver::ShadowRoot
watir_shadow = browser.div(element: shadow_root) #Watir::Div
watir_shadow.divs.count #undefined method `keys' for nil:NilClass我可能做错了什么:)最好问@titusfortner
/watirs/watir-7.1.0/lib/watir/locators/element/selector_builder.rb:73:in `merge_scope?'
/watirs/watir-7.1.0/lib/watir/locators/element/selector_builder.rb:50:in `normalize_selector'
/watirs/watir-7.1.0/lib/watir/locators/element/selector_builder.rb:28:in `build'
/watirs/watir-7.1.0/lib/watir/element_collection.rb:47:in `build'
/watirs/watir-7.1.0/lib/watir/element_collection.rb:18:in `initialize'
/watirs/watir-7.1.0/lib/watir/container.rb:28:in `new'
/watirs/watir-7.1.0/lib/watir/container.rb:28:in `elements'https://stackoverflow.com/questions/66580380
复制相似问题