我遇到了需要在同一个运行中打开几个独立的,不同的驱动程序浏览器会话并在它们之间移动的场景,即不是由同一个驱动程序通过点击链接打开的不同窗口,而不是不同的选项卡,弹出窗口相同驱动程序,而不是在不同的浏览器上测试相同的测试。
例如:测试同一用户允许的同时打开的会话的最大数量,然后在会话之间移动以优雅地注销和关闭。
我对网络进行了广泛的研究,发现只有一个与我的测试无关的参考文献。
经过多次实验,我找到了一个解决方案,现在有勇气与社区分享如何测试此类案例的方法。这是我的第一篇文章,我希望它能帮助别人。
下面的代码将打开初始驱动程序,然后是5 其他驱动程序以执行成功的活动登录,然后第6次登录将生成错误。之后,在不同的会话/浏览器之间切换以注销并关闭所有打开的驱动程序/会话。
ArrayList<WebDriver> Drivers=new ArrayList<WebDriver>();
String winHandleOnLoad=driver.getWindowHandle();
for(int i=0;i<=5;i++){
WebDriver loopdriver = new FirefoxDriver();
Drivers.add(i,loopdriver);
loopdriver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
loopdriver.get("YOUR URL");
WebElement uname = loopdriver.findElement(By.name(loginNameID));
WebElement pwd = loopdriver.findElement(By.name(PasswordID));
if ((uname.isDisplayed()==false) ||pwd.isDisplayed()==false) {
bPass=false;
break;
}
else{
// set the user name and pwd in input text box and submit to login
uname.sendKeys(LoginName);
pwd.sendKeys(password);
pwd.submit();
}
if(i<5){
// Verify that user successfully logged in performed agaisnt (LoginName)published on a page
String title=loopdriver.findElement(By.xpath("yourVerificationID")).getText();
if(title.equalsIgnoreCase(LoginName)){
System.out.println("Found Title="+title); // Verify login
}
else{
bPass=false;
}
}
else{ // 6th opened browser session should generate an error
String error=loopdriver.findElement(By.xpath("yourErrorLocationID")).getText();
if(error.contentEquals(Expected)){
System.out.println("True:Expected Error="+Expected+" Actual Error="+error);
bPass=true;
}
else{
System.out.println("Error Message is NOT Correct:Expected Error="+Expected+" Actual Error="+error);
bPass=false;
}
loopdriver.close();
}
}
//Switch between sessions to logout and close
for(int j=0;j<=4;j++){
WebDriver getDriver=Drivers.get(j);
getDriver.switchTo().defaultContent();
getDriver.findElement(By.xpath("yourLogoutLinkID")).click();
getDriver.close();
}
driver.switchTo().defaultContent(); //close initial "empty" window
driver.quit();
if (bPass==true){
System.out.println("PASSED");
}else if (bPass==false){
System.out.println("FAILED");
}
}//END