[英]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.