【问题标题】:Selenium find page is loaded or not?Selenium 查找页面是否已加载?
【发布时间】:2014-08-27 18:49:57
【问题描述】:

我正在使用 Selenium 网络驱动程序。我有以下方法可以导航到页面。

public String navigate(String url){
        driver = new FirefoxDriver();
        driver.get(url);
        return "Success";
    }

如果服务器启动,上面的代码可以正常工作。有时服务器可能已关闭,然后页面将无法加载。如果页面未加载,现在如何返回“failure”字符串?

谢谢!

【问题讨论】:

  • 最好等待或验证该页面上的元素。
  • 你能给我一些sn-p吗?
  • WebDriverWait 等待 = new WebDriverWait(driver, 10); WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.id(>someid>)));
  • 在哪里捕获异常?
  • 每个页面都不同。您如何定义该页面是否已加载? get 不会等待页面初始加载后的任何异步请求。那么如何定义那个页面是如何加载的呢?

标签: java selenium selenium-webdriver automation


【解决方案1】:

您不能直接测试 get() 是否失败,因为导航器总是显示一个页面。您可以检查此页面是否为已知错误页面,或检查您是否不在预期页面中。

第一个解决方案

这取决于导航器。 Chrome 在找不到 url 时会显示一个特殊页面,firefox 会显示另一个页面等。您可以测试这些页面的标题。例如,Firefox 错误页面标题类似于“页面加载错误”或“问题加载页面”。那么你所要做的就是:

if(driver.getTitle().equals("Problem loading page"))
   return "failure";

第二种解决方案

您必须检查您网站的每个页面中是否存在不存在的元素(例如徽标或主页按钮)。假设这个元素的 ID 是“foo”,你可以这样做:

if(driver().findElements(By.id("foo")).isEmpty())
   return "failure";

【讨论】:

  • 解决方案 1) 仅涵盖一种情况...问题是失败的页面可能会显示诸如“未找到”、“服务器未响应”、“禁止”等内容,如每个站点都实现了自己的错误处理程序。没有简单的解决方案来弥补错误,但这是一个起点。解决方案 2) 仅在您是该页面的所有者时才有效。我们都知道它是怎么回事:每个人都想不断改变……我正在处理这两个问题,除了我能想象的可能错误列表和测试成功的可能/预期事情之外,我想不出任何更好的办法。
【解决方案2】:

Dave Haeffner 有一个很好的解决方案,可以使用带有 webdriver 配置的代理检查状态代码。

http://elementalselenium.com/tips/17-retrieve-http-status-codes

示例是在 python 中,但 API 在 python 和 java 之间非常接近。从我自己实现的技巧中找到 java 类比方法并不困难。

那个网站有很多很好的信息。

【讨论】:

    【解决方案3】:

    如果使用页面对象模型,利用LoadableComponentClass 可以帮助确定页面是否由于服务器关闭或其他原因而被加载。 这是链接

    https://code.google.com/p/selenium/wiki/LoadableComponent

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多