[英]How to manage browser tabs with Serenity BDD?
如何使用 Serenity BDD 管理一个浏览器选项卡或多个浏览器 windows?
例如,我正在测试的站点中有一个链接可以在不同的目标中打开一个页面,这意味着它会在一个新的浏览器选项卡中打开。 我的 Serenity 测试无法在新页面上找到简单的 header(位于 xpath“//h3”),我能想到的唯一原因是它仍在查看原始浏览器选项卡。 所以我需要在做出断言之前以某种方式切换选项卡。
我知道我可以在 web 驱动程序级别切换浏览器选项卡。 但是因为我不能直接从演员那里得到驱动程序,go 关于访问演员正在使用的驱动程序的最佳方法是什么? 是的,我正在向演员提供该驱动程序,因此可以保留对它的引用,但由于我在同一测试中使用多个不同的演员(来宾用户导致只有管理员用户才能验证的更改)我会使它比某处简单的 web 驱动程序参考更复杂。
所以我的问题再次是:是否有一种很好的方法来管理内置在 Serenity BDD 或剧本模式中的演员浏览器中的选项卡?
您可以创建一个交互类来切换选项卡,并在交互类中直接使用actor的驱动程序,例如
public class SwitchToNewWindow implements Task {
private static final Logger log = LoggerFactory.getLogger(SwitchToNewWindow.class);
public SwitchToNewWindow() { }
@Override
public <T extends Actor> void performAs(T actor) {
WebDriver driver = BrowseTheWeb.as(actor).getDriver();
String currHandle = driver.getWindowHandle();
Set<String> allHandles = driver.getWindowHandles();
log.debug("open windows: " + allHandles.size());
log.debug("current window: " + currHandle);
for (String handle : allHandles) {
if (!handle.contentEquals(currHandle)) {
driver.switchTo().window(handle);
break;
}
}
log.debug("new window: " + driver.getWindowHandle());
}
public static SwitchToNewWindow change() {
return Tasks.instrumented(SwitchToNewWindow.class);
}
}
public class SwitchToNewWindow implements Task{
public SwitchToNewWindow (){}
public static SwitchToNewWindow switchToNewTab(){
return Instrumented.instanceOf(SwitchToNewWindow.class).withProperties();
}
@Step("{0} Switching to new Window")
public <T extends Actor> void performAs(T actor) {
String currentWindow = getDriver().getWindowHandle();
Set<String> allWindows = getDriver().getWindowHandles();
for(String window : allWindows){
if(!window.contentEquels(currentWindow){
getDriver().switchTo().window(window);
break;
}
}
}
}
在您的步骤定义中
actor.attemptsTo(SwitchToNewWindow.switchToNewTab());
actor.attemptsTo(Switch.toNewWindow());
如果它已经打开,则切换到新标签
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.