Selenium 获取DOM元素并使用其属性的量角器

Selenium 获取DOM元素并使用其属性的量角器,selenium,selenium-webdriver,protractor,automated-tests,end-to-end,Selenium,Selenium Webdriver,Protractor,Automated Tests,End To End,我正在聚合物/角型应用程序上使用量角器和硒进行e2e测试。 大多数元素都在影子DOM中(我设法用自定义css定位器来处理它,但它使我的测试不稳定,因为DOM中的任何更改都会破坏它们)。问题是开发人员已经实现了一个虚拟滚动列表: 滚动列表中只加载了几个项目,滚动时会加载下一个项目。 我问我的开发人员如何处理它,他们告诉我,我必须获得web组件并测试它,而不必运行以下命令: document.querySelector('virtual-scroll').baseList 其中baseList是标

我正在聚合物/角型应用程序上使用量角器和硒进行e2e测试。 大多数元素都在影子DOM中(我设法用自定义css定位器来处理它,但它使我的测试不稳定,因为DOM中的任何更改都会破坏它们)。问题是开发人员已经实现了一个虚拟滚动列表: 滚动列表中只加载了几个项目,滚动时会加载下一个项目。 我问我的开发人员如何处理它,他们告诉我,我必须获得web组件并测试它,而不必运行以下命令:

document.querySelector('virtual-scroll').baseList
其中baseList是标记的公共属性。 我试过了

但是上面的命令返回一个WebElement。有没有办法像javascript querySelector命令那样返回HTML DOM元素

编辑:根据请求,如果“virtual scroll”是影子根元素的名称,
baseList
是元素的属性,则使用我想要获取的scrollList属性的源代码。您可以通过下面的命令获得它

var baseList = browser.executeScript('return document.querySelector("virtual-scroll").baseList');
顺便说一下,您可以使用Selenium测试阴影DOM。请参见下面的示例

var shadowRootElement = browser.executeScript('return document.querySelector("virtual-scroll").shadowRoot');
var element = shadowRootElement.findElement(......);

我发现我可以使用这个命令:browser.executeScript('returndocument.querySelector(“iris-app”).baseList;')。它可以工作,但我仍然不明白为什么我不能直接获取父对象并调用其属性。请尝试leatest Digrator的API
by.deepCSS()
,该API用于通过阴影DOM中的css选择器查找元素,详情如下:很好,它已被弃用,这就是我使用自定义css定位器的原因。这些都很好,这不是问题所在。我很抱歉,如果你误解了这只是一个旁注,如果有人也有关于它的提示。我知道我可以通过这种方式获取属性,但这使得我的测试很难维护:每次我想使用一个属性并将其保存在一个var中以便以后重用时,我都必须调用browser.executeScript(return blablabla.property)。我希望能够调用let a=browser.executeScript(return blabla)console.log(a.property)@JiggyJinjo为什么不获取阴影根?因为基本列表没有加载到DOM中,它的一部分会动态地“注入”到虚拟卷轴中(虚拟卷轴中有数百个项目,同时只有15个项目被加载)能否在虚拟卷轴周围显示ChromeDevtool中HTML的屏幕截图?我仍然不明白为什么不能在阴影DOM中获取元素的属性。我更新了我的帖子,我实际上可以通过使用browser.executeScript(“return document.querySelector(“iris-app”).baseList;”)获取元素的属性,但是,我无法通过父标记访问属性,例如:a=browser.executeScript('returndocument.querySelector(“iris-app”);');console.log(a.baseList);
var shadowRootElement = browser.executeScript('return document.querySelector("virtual-scroll").shadowRoot');
var element = shadowRootElement.findElement(......);