如何等待页面重新打开

问题描述 投票:0回答:1

我有一个页面,如果您登录,可以使用额外的功能。登录是通过弹出面板。成功登录后,将重新加载页面(以便将适合用户权限的选项动态添加到界面中)。

    @Override
 @Step("Logs in as: {0}")
    public <T extends Actor> void performAs(T actor) {
        actor.attemptsTo(         
            Open.browserOn(homePage),
            Click.on(homePage.loginMenuItem),
            Enter.theValue(authenticated(actor).username())
                 .into(homePage.userField),
            Enter.theValue(authenticated(actor).password())
                 .into(homePage.pwdField),
            Click.on(homePage.loginBtn),            
        );
  }

该测试使用一个问题来查询页面状态。但是,我所看到的是,在重新加载之前,测试似乎在页面上运行。 (超时等待目标,返回页面上的旧值元素,具体取决于我如何处理问题)。我可以看到修改后的页面正在显示。显然,我需要等到页面重新打开以响应点击,然后我才会问我认为selenium应该做的问题。但我该怎么办?如果我添加:

            Open.browserOn(homePage)

点击后,它的工作原理 - 主要是。有时它似乎仍然响应旧页面。但如果我重新运行,它通常会起作用。即上述方法是片状的。我可以等待2秒钟,但理论上如果身份验证服务器速度很慢,它仍然可能会失败。想法请。

selenium-webdriver serenity-bdd
1个回答
1
投票

在线之前

Click.on(homePage.loginBtn)

抓取一个元素,比如登录按钮并将其存储在变量中。然后单击登录按钮...然后等待登录按钮变得陈旧。陈旧元素表示页面已刷新。在那之后,您就可以再次访问该页面了。

我不知道你有什么辅助函数可用,但看起来应该是这样的

WebElement loginButton = driver.findElement(homePage.loginBtn);
Click.on(homePage.loginBtn)
new WebDriverWait(driver, 10).until(ExpectedConditions.stalenessOf(loginButton));
// do stuff
© www.soinside.com 2019 - 2024. All rights reserved.