检查Selenium中的HTTP状态码

如何获取Selenium中的HTTP状态码?

例如,所以我可以testing,如果浏览器请求/用户/ 27,并没有用户ID = 27存在,一个HTTP 404返回?

我的主要兴趣是Selenium RC,但如果有人知道“正常”selenium的答案,我可以很容易地把它翻译成RC。

/皮特

对于这种types的testing,这可能不是selenium的最佳使用方式。 当你可以做,并且有更快的运行testing时,不需要加载浏览器

[Test] [ExpectedException(typeof(WebException), UserMessage = "The remote server returned an error: (404) Not Found")] public void ShouldThrowA404() { HttpWebRequest task; //For Calling the page HttpWebResponse taskresponse = null; //Response returned task = (HttpWebRequest)WebRequest.Create("http://foo.bar/thiswontexistevenifiwishedonedayitwould.html"); taskresponse = (HttpWebResponse)task.GetResponse(); } 

如果你的testing在404 Selenium期间redirect到另一个页面,可以检查最后一页是否符合你的期望。

由于Selenium 2包含HtmlUnit,因此您可以利用它来直接访问响应。

 public static int getStatusCode(long appUserId) throws IOException { WebClient webClient = new WebClient(); int code = webClient.getPage( "http://your.url/123/" ).getWebResponse().getStatusCode(); webClient.closeAllWindows(); return code; } 

我知道这是一个令人震惊的黑客,但这是我所做的:

  protected void AssertNotYellowScreen() { var selenium = Selenium; if (selenium.GetBodyText().Contains("Server Error in '/' Application.")) { string errorTitle = selenium.GetTitle(); Assert.Fail("Yellow Screen of Death: {0}", errorTitle); } } 

它在我需要的情况下完成工作,虽然我接受它不是理想的…

您可能想要查看captureNetworkTraffic()调用。 现在它只能可靠地与Firefox一起使用,除非您手动设置IE / Safari / etc通过端口4444代理通信。

要使用它,只需调用selenium.start(“captureNetworkTraffic = true”),然后在脚本中,可以调用selenium.captureNetworkTraffic(“…”),其中“…”是“plain”,“xml “或者”json“。

我还没有尝试过,但是如果你不介意限制自己到Firefox,并安装Firebug和Netexport,那么Selenium可以访问页面状态代码(以及在Firebug的Net面板中的所有其他内容): http:// selenium .polteq.com / EN /使用-netexport到出口firebugs净面板/

试试这个,人

 WebClient wc = new WebClient(); int countRepeats = 120; // one wait = 0.5 sec, total 1 minute after this code boolean haveResult = false; try { HtmlPage pageHndl = wc.getPage(Urls); for(int iter=0; iter<countRepeats; iter++){ int pageCode = pageHndl.getWebResponse().getStatusCode(); System.out.println("Page status "+pageCode); if(pageCode == 200){ haveResult = true; break; } else{ Thread.sleep(500); } } } catch (IOException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } catch (InterruptedException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. } 

如果一切都失败了,你可以在testing过程中调整你的服务器端代码,在页面中输出HTTP状态作为一个元素:

例如,在我的“403权限被拒”页面上,我有:

  <h1 id="web_403">403 Access Denied</h1> 

这可以通过WebDriver API轻松检查:

  public boolean is403(WebDriver driver) { try { driver.findElement(By.id("web_403")); return true; } catch (NoSuchElementException e) { return false; } } 

http://www.ninthavenue.com.au/how-to-get-the-http-status-code-in-selenium-webdriver