我刚刚更新了我的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页面)制作的页面是否自动丢失,或者是否有解决此问题的方法?
答案 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)。它与我在控制台中的工作方式相同(即,我看到控制台日志,并删除了下载项)。以下是重现的步骤:
irb
shell(复制+粘贴)中运行以下命令:require 'watir-webdriver'
b = Watir::Browser.new :chrome
在新打开的Chrome窗口中,下载多个文件以创建一些下载项,然后打开下载标签。
在irb
shell中运行以下命令(复制+粘贴):
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)
观察下载标签不再包含下载项目。
从下载标签打开Chrome控制台。
观察控制台显示几行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可能值得一试。