2010-03-01 150 views
38

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

E.g.所以我可以测试,如果浏览器请求/ user/27并且没有ID = 27的用户存在,HTTP 404将被返回?

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

/皮特

+0

的可能的复制[检查的HttpResponse OK(200)与硒的webdriver(http://stackoverflow.com/questions/14537336/checking-httpresponse-ok-200-with-selenium-webdriver) – Kzqai

+2

这个问题并不完全相同,因为当我在6年前问这个问题时,我在谈论Selenium RC,它早于WebDriver。但是这也使得这个问题变得毫无意义,因为我不认为人们会再使用旧的API。 – Pete

回答

10

这可能不是硒的这种类型的测试的最佳利用。有必要需要载入浏览器时,你可以这样做,有一个更快的运行测试

[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(); 
} 

如果测试404硒期间重定向到另一个页面可以查看在最后一页有你所期望的。

1

您可能想要查看captureNetworkTraffic()调用。现在它只能与Firefox工作可靠,除非你手动设置IE/Safari浏览器/等,以通过端口代理业务4444

要在以后使用它,只需调用selenium.start(“captureNetworkTraffic =真”),然后在您的脚本中,您可以调用selenium.captureNetworkTraffic(“...”),其中“...”是“普通”,“xml”或“json”。

5

由于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; 
} 
+5

不幸的是,它不适用于Selenium的C#版本。 – Pete

5

我知道这是一个令人震惊的黑客攻击,但是这是我做了什么:

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); 
     } 
    } 

它得到我需要它的情况下所做的工作,虽然我接受它的效果并不理想...

+0

我甚至只是在正文中寻找单词“错误”。不理想,但它完成了工作。 –

+0

是的,我有这个想法,并且正在寻找更好的东西,但是这看起来像我现在必须去的方式。 –

-2

如果一切都失败了,你可以在测试过程中在页面元素适应你的服务器端代码,输出HTTP状态:

例如,我的403权限被拒绝页面上,我有:

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

可以通过API的webdriver容易确认:

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

-2

尝试th是,人们

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. 
}