如何获取Selenium中的HTTP状态码?检查Selenium中的HTTP状态码
E.g.所以我可以测试,如果浏览器请求/ user/27并且没有ID = 27的用户存在,HTTP 404将被返回?
我的主要兴趣是Selenium RC,但如果有人知道“正常”硒的答案,我可以很容易地将它翻译成RC。
/皮特
如何获取Selenium中的HTTP状态码?检查Selenium中的HTTP状态码
E.g.所以我可以测试,如果浏览器请求/ user/27并且没有ID = 27的用户存在,HTTP 404将被返回?
我的主要兴趣是Selenium RC,但如果有人知道“正常”硒的答案,我可以很容易地将它翻译成RC。
/皮特
这可能不是硒的这种类型的测试的最佳利用。有必要需要载入浏览器时,你可以这样做,有一个更快的运行测试
[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硒期间重定向到另一个页面可以查看在最后一页有你所期望的。
您可能想要查看captureNetworkTraffic()调用。现在它只能与Firefox工作可靠,除非你手动设置IE/Safari浏览器/等,以通过端口代理业务4444
要在以后使用它,只需调用selenium.start(“captureNetworkTraffic =真”),然后在您的脚本中,您可以调用selenium.captureNetworkTraffic(“...”),其中“...”是“普通”,“xml”或“json”。
由于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;
}
不幸的是,它不适用于Selenium的C#版本。 – Pete
我知道这是一个令人震惊的黑客攻击,但是这是我做了什么:
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);
}
}
它得到我需要它的情况下所做的工作,虽然我接受它的效果并不理想...
我甚至只是在正文中寻找单词“错误”。不理想,但它完成了工作。 –
是的,我有这个想法,并且正在寻找更好的东西,但是这看起来像我现在必须去的方式。 –
如果一切都失败了,你可以在测试过程中在页面元素适应你的服务器端代码,输出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
我还没有尝试过,但如果你不介意把自己局限于Firefox和安装Firebug和Netexport,然后Selenium可以访问页面状态代码(以及Firebug的Net面板中的所有其他内容):http://selenium.polteq.com/en/using-netexport-to-export-firebugs-net-panel/
尝试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.
}
的可能的复制[检查的HttpResponse OK(200)与硒的webdriver(http://stackoverflow.com/questions/14537336/checking-httpresponse-ok-200-with-selenium-webdriver) – Kzqai
这个问题并不完全相同,因为当我在6年前问这个问题时,我在谈论Selenium RC,它早于WebDriver。但是这也使得这个问题变得毫无意义,因为我不认为人们会再使用旧的API。 – Pete