got*_*me4 6 selenium shadow-dom protractor polymer-2.x
目前,我的组织在聚合物1上使用Selenium,Protractor和Mocha,我们使用阴暗的dom.对于验收测试,我们使用/deep/
组合器来刺穿DOM
.对于聚合物2,/deep/
组合剂不推荐使用.
我的问题:在编写验收测试时,DOM
如果/deep/
不推荐使用组合器,我该如何穿透阴影?
小智 0
经过互联网上的大量研究后,我想出了一个对我来说效果很好的解决方案。
我遵循的步骤:
请看下面的代码:
String[] shadowRootCalender = {"tickets-spa","tickets-config-page","#calendar"};
String date="2019-04-16";
FindShadowRootElement(driver, shadowRootCalender).findElement(By.cssSelector("wdat-date[slot='"+date+"']")).click();
public static WebElement FindShadowRootElement(WebDriver driver, String[] shadowRootSelector) {
WebElement root = null;
for(int i=0; i<shadowRootSelector.length; i++) {
if(i==0) {
isjQueryLoaded(driver);
root = (WebElement)((JavascriptExecutor)driver).executeScript("return document.querySelector(arguments[1]).shadowRoot", root, shadowRootSelector[i]);
}else {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
root = (WebElement)((JavascriptExecutor)driver).executeScript("return arguments[0].querySelector(arguments[1]).shadowRoot", root, shadowRootSelector[i]);
}
}
return root;
}
public static void isjQueryLoaded(WebDriver driver) {
// System.out.println("Waiting for ready state complete");
(new WebDriverWait(driver, 30)).until(new ExpectedCondition<Boolean>() {
public Boolean apply(WebDriver driver) {
JavascriptExecutor js = (JavascriptExecutor) driver;
String readyState = js.executeScript("return document.readyState").toString();
//System.out.println("Ready State: " + readyState);
return (Boolean) js.executeScript("return !!window.jQuery && window.jQuery.active == 0");
}
});
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
525 次 |
最近记录: |