【问题标题】:playwright conditional page.waitForNavigation编剧条件页.waitForNavigation
【发布时间】:2022-01-25 21:58:50
【问题描述】:

在自动登录时,我单击一个元素可能会导致导航到另一个页面,但如果密码无效,它只会在同一页面上显示错误消息而不会真正导致导航。

我试过了:

await Promise.all([
      this.page.submitButton.click(),
      this.page.waitForNavigation()
    ]); 

但是在没有导航发生的情况下它会失败。 我正在考虑拦截响应,以检查登录是否成功/失败,但可能有更清晰的方法吗?

【问题讨论】:

    标签: javascript node.js automation puppeteer playwright


    【解决方案1】:

    此代码应为您提供一个示例,说明如何理解您是否停留在同一页面或导航:

    await this.page.submitButton.click();
    
    try {
        await this.page.waitForNavigation();
        // if we are here it means login was successful
    } catch(e) {
        // if we are here it means login failed
    }
    

    【讨论】:

    • 谢谢,在这种情况下 waitForNavigation() 只会在超时时退出,对吧?
    • @Zaky 完全正确。但是你可以检查一些确切的东西而不是 waitForNavigation。例如,您可能会在密码错误的情况下检查错误消息。但我猜这也意味着等待。
    • 我想避免等待 waitForNavigation,但对我有用的是相反的方法。我只是等待选择器的超时时间很短,如果它失败了(意味着页面开始导航,我调用了 await page.waitForNavigation()。
    • @Zaky 也许你也可以 waitForNavigation() 短暂超时
    • 我担心它会引入竞争条件,因为如果导航真的应该发生,我需要在一些硬编码超时时再次调用 waitForNavigation
    【解决方案2】:

    除了this.page.submitButton.click()之外,我认为您不需要额外的代码。
    click 函数将等待您的导航。因此,您可以在点击后检查您是否在同一个 URL 中。

    await this.page.submitButton.click(); // This will wait for a possible navigation
    
    if(this.page.url() == destinationOnValidLogin) {
     // Good login stuff
    } else {
     // Login failed
    }
    

    【讨论】:

    • 如果我理解正确,click() 将在导航开始后立即返回,在页面完全加载之前。另一方面,在我的场景中 click() 可能只会导致更新页面的新请求,而不会实际导致导航。理想情况下,我想区分这些流程:如果 click() 仅导致更新或实际导航。
    • 根据文档点击会Wait for initiated navigations to either succeed or fail, unless noWaitAfter option is set.
    • 您的意思是我可以单击设置 noWaitAfter 选项(假设在页面更新或开始导航时单击返回)然后检查 page.$('some-marker) - 存在否则调用 page.waitForNavigation() ?
    • 您不需要设置noWaitAfter,这是默认行为。我添加了一个代码示例。如果有帮助,请告诉我。
    • 嗯,它没有。如果我在调用 await this.page.click() 之后检查页面 url,我会得到相同的 url(在这两种情况下)。此外,我试图拦截来自后端的响应以检查登录成功/失败 - 我无法得到它,因为请求来自服务工作者,并且令人惊讶的是剧作家没有拦截它。
    猜你喜欢
    • 2022-10-24
    • 1970-01-01
    • 2021-06-28
    • 2022-10-25
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多