【发布时间】:2019-05-21 06:56:58
【问题描述】:
作为自动化测试的一部分,在我的 ruby capybara 功能规范中,我尝试在 chrome 浏览器中编写一个测试,下载 PDF 文件后,我转到 chrome://downloads/ 并希望能够单击文件将其打开;但是由于 shadow-roots dom 对象,我无法单击该链接。有没有解决方案来实现这一目标?
以下是我尝试过的抱怨: 无方法错误: #Selenium::WebDriver::Element:0x007f96dba3ba78 的未定义方法“find”
代码是:
visit 'chrome://downloads'
sleep(1)
root1 = find('downloads-manager')
shadow_root1 = expand_shadow_element(root1)
root2 = shadow_root1.driver.browser.find_element(:css, 'iron-list')
shadow_root2 = expand_shadow_element(root2)
root3 = shadow_root2.find('downloads-item')
shadow_root3 = expand_shadow_element(root3)
file_link = shadow_root3.find("file-link")
file.link.click
def expand_shadow_element(element)
shadow_root = execute_script('return arguments[0].shadowRoot', element)
return shadow_root
end
【问题讨论】:
-
你确定可以吗?该页面不是真正的网页。
-
您的测试为什么要测试 Chrome?您应该相信 Google 已经这样做了。
-
@tadman 是的,我已经能够通过 selenium python 绑定使用 body/deep 组合器来访问影子 DOM 树。我正在尝试寻找硒红宝石绑定的解决方案。
-
@aridlehoover 我只在这里发布了我的测试代码的相关摘录。我为什么这样做的其他细节是,我可以单击 pdf 文件(从我之前的测试生成)将其打开,然后我可以抓取屏幕截图,然后调用我的图像比较方法来断言屏幕截图是否与我在另一个目录中的基本图像。所以在这里我只是在寻找一种方法来单击 chrome://downloads 中的文件以打开它以获取屏幕截图。
-
知道了。因此,这是一个真正的端到端测试。我敢打赌,Chrome 总是将下载的文件放在同一个文件夹中。您可以直接从该位置打开文件,而不是尝试在浏览器中打开。
标签: ruby selenium-webdriver capybara