Polymer 是否可以使用Watir Webdriver与聚合物进行交互?
我刚刚更新了我的Chrome浏览器版本50.0.2661.75,发现chrome://downloads 页面已更改,因此我的自动测试无法再与之交互。以前,我一直在使用Watir Webdriver清除下载页面,从我的机器上删除文件,等等,没有太多困难 看起来谷歌在这个页面上使用了聚合物 对我来说,有一些新的元素,比如纸按钮,是Watir Webdriver无法识别的 甚至浏览器。img:id,“文件图标”。是否存在?当我 可以清楚地看到页面上的图像Polymer 是否可以使用Watir Webdriver与聚合物进行交互?,polymer,watir-webdriver,Polymer,Watir Webdriver,我刚刚更新了我的Chrome浏览器版本50.0.2661.75,发现chrome://downloads 页面已更改,因此我的自动测试无法再与之交互。以前,我一直在使用Watir Webdriver清除下载页面,从我的机器上删除文件,等等,没有太多困难 看起来谷歌在这个页面上使用了聚合物 对我来说,有一些新的元素,比如纸按钮,是Watir Webdriver无法识别的 甚至浏览器。img:id,“文件图标”。是否存在?当我 可以清楚地看到页面上的图像 自动化用聚合物制作的页面,特别是chrome
自动化用聚合物制作的页面,特别是chrome://downloads 在对Watir Webdriver进行更改之前,页面将一直处于丢失状态,或者是否有此问题的解决方案?看起来Google将元素放在了Shadow Dom中,而Selenium/Watir/Webdriver规范还不支持此功能。可能有一种方法可以通过javascript browser.execute_脚本获取元素,但它充其量只是实验性的。考虑到下载项目可以通过javascript访问,并且正如@titusfortner所指出的那样,Watir可以自动生成新的下载页面 注意聚合物中的阴影根元素又名局部DOM 下面是一个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();
});
})();
更新:我使用ChromeDriver 2.21在OS X中使用Watir Webdriver验证了Javascript。它的工作原理与我在控制台中的工作原理相同,即,我看到控制台日志,下载项被删除。以下是复制的步骤:
在新的irb外壳复制+粘贴中运行以下命令:
需要“watir webdriver”
b=Watir::Browser.new:chrome
在新打开的Chrome窗口中,下载几个文件以创建一些下载项目,然后打开下载选项卡
在irb外壳复制+粘贴中运行以下命令:
脚本=函数{
var项目=文档
.querySelector'downloads-manager'
.$$‘铁名单’
.querySelectorAll'downloads-item';
Array.fromitems.forEachitem=>{
让hasIcon=项目类型。$$‘文件图标’!==‘未定义’;
console.log'hasIcon',hasIcon;
让filename=item.$$'file-link'.textContent;
log'filename',filename;
项。$.remove.click;
};
};
b、 执行脚本
请注意,下载选项卡不再包含下载项目
从下载选项卡打开Chrome控制台
观察控制台显示几行hasIcon true和下载项目的文件名
尝试自动化Polymer页面时,我发现我可以通过在URL中添加?dom=shady来请求Polymer使用shady dom来访问web元素。如本页示例所示:
将DOM参数添加到请求聚合物以使用阴暗的DOM可能值得一试。
如果您考虑JS来解决聚合物集成问题,请参见PSK的主要APP.JS,我将查看是否可以使其工作。我对Javascript了解不多,而且我发现您的代码中有一些语法错误。在我的问题中指定的Linux Chrome版本上尝试了它,也在一个与您的版本更接近的版本上尝试了它,但仍然是Linux:49.0.2623.110。还有一个散乱的点导致了语法错误。现在修好了。啊,迷路的小点似乎是它的症结所在。它清除了我的大部分下载,奇怪的是只剩下了一些,但这只是一个开始。谢谢在选择答案之前,我将做更多的工作。您的脚本在控制台中工作,但我在使用Watir Webdriver实现它时遇到困难。可能是因为Watir Webdriver对Polymer不满意,但肯定是因为我缺乏扎实的Javascript技能。希望我能得到你的想法为我工作-我需要做一些其他的事情,除了这个脚本所做的。但我感谢你的帮助,并对你的答案投了赞成票。我不认为Watir Webdriver与Polymer有任何问题,因为我刚刚用它验证了Javascript。请看更新的答案。哇,考虑到所有使用Webdriver的东西,这一改变将破坏全世界的许多自动化。”感谢谷歌的支持http://example.com/test-app/index.html?dom=shady