【问题标题】:How can I click the downloaded file when viewing chrome://downloads/查看 chrome://downloads/ 时如何单击下载的文件
【发布时间】: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


【解决方案1】:

您正在尝试在本机 selenium-webdriver 元素上调用 Capybara 方法。您拥有本机 selenium-webdriver 元素的原因是您使用的是execute_script,当您期望返回值时不应该使用它 - 而应该使用evaluate_script

def expand_shadow_element(element)
  evaluate_script('arguments[0].shadowRoot', element)
end

或者在最近的 Capybara 版本中

def expand_shadow_element(element)
  element.evaluate_script('this.shadowRoot')
end

然后,这会将返回的 selenium-webdriver 元素包装在 Capybara 元素中,并允许使用您期望的方法。尽管 webdriver 规范中还没有对 shadow 的支持,因此无法保证它与 shadow dom 的工作情况如何,因此 selenium-webdriver 中没有大量支持。

【讨论】:

  • 谢谢!我会尝试并返回。
猜你喜欢
  • 2020-01-03
  • 1970-01-01
  • 2017-10-27
  • 1970-01-01
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
  • 2020-07-12
  • 2019-10-20
相关资源
最近更新 更多