是否可以使用Watir-Webdriver与Polymer进行交互?

时间:2016-04-14 18:12:36

标签: polymer watir-webdriver

我刚刚更新了我的Chrome浏览器(版本50.0.2661.75),并发现chrome:// downloads页面已更改,因此我的自动化测试无法再与其进行交互。以前,我一直在使用Watir-Webdriver清除下载页面,从我的机器上删除文件等,没有太多困难。

Google似乎在此页面上使用Polymer

  • 有一些新的(对我来说)元素,如paper-button Watir-Webdriver无法识别

  • 即使browser.img(:id, 'file-icon').present?我还是false 可以清楚地看到图像在页面上。

在对Watir-Webdriver进行更改之前,使用Polymer(特别是chrome:// downloads页面)制作的页面是否自动丢失,或者是否有解决此问题的方法?

3 个答案:

答案 0 :(得分:2)

看起来谷歌把这些元素放在了Shadow-Dom中,而Selenium / Watir / WebDriver规范还没有支持它。可能有一种方法可以通过javascript(browser.execute_script(<...>))获取元素,但它仍然是实验性的。

答案 1 :(得分:2)

鉴于下载项目可以通过Javascript访问,而Watir allows Javascript execution(正如@titusfortner指出的那样),可以使用Watir自动化新的下载页面。

注意阴影根元素(又名&#34;本地DOM&#34;在Polymer中)can be queried with $$

这是一个示例Javascript,它记录每个下载项的图标存在和文件名,并从列表中删除项目。将代码段复制并粘贴到Chrome控制台进行测试(在OS X El Capitan的Chrome 49.0.2623.112中验证)。

(function() {
  var items = document
                .querySelector('downloads-manager')
                .$$('iron-list')
                .querySelectorAll('downloads-item');

  Array.from(items).forEach(item => {
    let hasIcon = typeof item.$$('#file-icon') !== 'undefined';
    console.log('hasIcon', hasIcon);

    let filename = item.$$('#file-link').textContent;
    console.log('filename', filename);

    item.$.remove.click();
  });
})();

更新:我在OS X中使用Watir-Webdriver验证了Javascript(使用ChromeDriver 2.21)。它与我在控制台中的工作方式相同(即,我看到控制台日志,并删除了下载项)。以下是重现的步骤:

  1. 在新的irb shell(复制+粘贴)中运行以下命令:
  2. require 'watir-webdriver'
    b = Watir::Browser.new :chrome
    
    1. 在新打开的Chrome窗口中,下载多个文件以创建一些下载项,然后打开下载标签。

    2. irb shell中运行以下命令(复制+粘贴):

    3. script = "(function() {
        var items = document
                      .querySelector('downloads-manager')
                      .$$('iron-list')
                      .querySelectorAll('downloads-item');
      
        Array.from(items).forEach(item => {
          let hasIcon = typeof item.$$('#file-icon') !== 'undefined';
          console.log('hasIcon', hasIcon);
      
          let filename = item.$$('#file-link').textContent;
          console.log('filename', filename);
      
          item.$.remove.click();
        });
      })();"
      
      b.execute_script(script)
      
      1. 观察下载标签不再包含下载项目。

      2. 下载标签打开Chrome控制台。

      3. 观察控制台显示几行hasIcon true以及下载项目的文件名。

答案 2 :(得分:0)

尝试自动化Polymer页面,我发现我能够通过在URL中添加?dom = shady来请求Polymer使用阴影dom来访问web元素。与此页面上的示例一样https://www.polymer-project.org/1.0/docs/devguide/settings

http://example.com/test-app/index.html?dom=shady

添加dom参数以请求Polymer使用阴影dom可能值得一试。