【问题标题】:How to Wait for a Redirect Chain to Settle using Selenium WebDriver where final page loaded is not predictable?在最终页面加载不可预测的情况下,如何使用 Selenium WebDriver 等待重定向链解决?
【发布时间】:2018-04-28 07:45:27
【问题描述】:

我想自动化一个脚本来验证网页中的某些内容。

登录页面在登陆应用程序页面之前重定向了几次,这些重定向偶尔会导致问题。这个问题肯定与时间有关。那么 webdriver 怎样才能等到最后一页完全加载或者解决呢?

典型的解决方案是等待目标页面上的元素可用。不幸的是,我们使用了 100 多个唯一网址,因此没有可预测的着陆页。

那么如何实现一个 ExpectedCondition 来等待应用程序在重定向方面稳定下来?

主要议程是,我有一组 URL,我想通过检查其中的内容来验证所有这些 URL 是否有效。所有这些都是我的组织合作的学习内容的直接 URL,例如 Lynda、skillsoft 等。因此,当我们首先通过自动脚本启动这些 URL 时,它会询问身份验证(我的组织凭据),然后它会重定向到相应的站点。在这些重定向期间,在某些情况下会发生多次重定向,最后加载内容页面。这就是场景。我猜我的脚本失败主要是因为等待

【问题讨论】:

  • 登录后你会得到正确的用户操作。所以你可以写一个while循环来搜索用户名。while(username.isDisplayed(){Thread.sleep(5000);}
  • 有些网址有登录页面,有些有直接网址。那些没有登录的页面。我们将如何等待?
  • 你能详细说明一下these redirects were causing issues 吗?
  • 你在predictable landing page 上做wait for an element 还有什么可以作为你的验证点?你能用你尝试Automate的确切手动步骤更新问题吗?
  • 主要议程是,我有一组 URL,我想通过检查其中的内容来验证所有这些 URL 是否有效。所有这些都是我的组织合作的学习内容的直接 URL,例如 Lynda、skillsoft 等。因此,当我们首先通过自动脚本启动这些 URL 时,它会询问身份验证(我的组织凭据),然后它会重定向到相应的站点。在这些重定向期间,在某些情况下会发生多次重定向,最后加载内容页面。这就是场景。我猜我的脚本失败主要是因为等待

标签: selenium url selenium-webdriver redirect webdriverwait


【解决方案1】:

正如您提到的multiple redirection happening and finally the content page is loadedscript fails mainly due to the wait 几乎是可能的。在这些情况下,我们需要引入 ExplicitWaitWebDriverWait 并将 expected_conditions 子句设置为以下之一:


Java:

  1. urlToBe: 检查当前 url 的期望是完全匹配。

    new WebDriverWait(driver, 10).until(ExpectedConditions.urlToBe("https://www.facebook.com/"));
    
  2. urlContains: 期望检查当前 url 是否包含区分大小写的子字符串。

    new WebDriverWait(driver, 10).until(ExpectedConditions.urlContains("facebook"));
    
  3. urlMatches:检查当前 url 模式的期望是必须完全匹配的期望模式。

    new WebDriverWait(driver, 10).until(ExpectedConditions.urlMatches("my_regex"));
    

Python:

  1. url_to_be:期望当前页面的 URL 是一个特定的 url。

    WebDriverWait(driver, 10).until(EC.url_to_be("https://www.google.co.in/"))
    
  2. url_matches:期望 URL 匹配特定的正则表达式。

    WebDriverWait(driver, 10).until(EC.url_matches("my_regex"))
    
  3. url_contains:期望当前页面的 URL 包含特定文本。

    WebDriverWait(driver, 10).until(EC.url_contains("google"))
    
  4. url_changes: 期望检查当前 url 不能完全匹配。

    WebDriverWait(driver, 10).until(EC.url_changes("https://www.google.co.in/"))
    

【讨论】:

    猜你喜欢
    • 2017-02-21
    • 1970-01-01
    • 2019-01-31
    • 2014-09-26
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 2012-01-19
    • 2018-06-23
    相关资源
    最近更新 更多