在使用selenium中,会经常遇到,校验弹窗,或者是多标签之类的,
会发现在当前webdriver中.查找想检查的元素,比如弹窗上某个元素就查找不到了
那么就出现了一个句柄的概念
在Selenium中,可以使用`driver.window_handles`方法获取当前浏览器中所有窗口的句柄。
该方法返回一个列表,其中包含每个窗口的唯一标识符。
可以使用这些句柄来在不同的窗口之间切换,例如使用`driver.switch_to.window(handle)`方法将控制转移到具有给定句柄的窗口。
话不多说上代码
此代码校验点有两个:
1、是不是新打开了一个窗口
2、新打开的窗口链接是不是符合预期
int numBefore = webDriver.getWindowHandles().size();//点击前有多少个句柄标签:webDriver,窗口,句柄,多窗口,selenium,校验,笔记,winHandle,window From: https://www.cnblogs.com/happiness30/p/17353633.html
((JavascriptExecutor) webDriver).executeScript("arguments[0].click();", webElement);//点击(有时候单纯的.click不生效就用这个方法)
//点击新打开页面
int numAfter = webDriver.getWindowHandles().size();//点击后有多少个句柄
if(numAfter>numBefore){
//说明是新建标签页打开的
String winHandleBefore = webDriver.getWindowHandle();
for(String winHandle : webDriver.getWindowHandles()) {
if (winHandle.equals(winHandleBefore)) {
continue;
}
webDriver.switchTo().window(winHandle);//将控制转移给新打开的句柄窗口以方便获取新窗口元素校验
break;
}
}
if(webDriver.getCurrentUrl().contains(校验点)
){
//校验点
}
//重新变成原来页面,方便后续继续回归原页面其它功能
if(numAfter>numBefore){
webDriver.close();
for(String winHandle : webDriver.getWindowHandles()) {
webDriver.switchTo().window(winHandle);
}
}