2010-03-01 24 views
38

Selenium'da HTTP durum kodu nasıl alınır?Selenium'da HTTP Durum Kodunun Denetlenmesi

E.g. Bu yüzden, eğer tarayıcı/user/27 ve ID = 27 olan bir kullanıcı yoksa, bir HTTP 404 döndürülürse test edebilirim? Birincil ilgim Selenium RC'dir, ancak bir kişi "normal" selenyum cevabını biliyorsa, muhtemelen bunu kolayca RC'ye dönüştürebilirim.

/Pete

+0

Olası yinelenen vardır [Denetleme HttpResponse Tamam (200) ile Selenyum WebDriver] (http://stackoverflow.com/questions/14537336/checking-httpresponse-ok-200-with-selenium-webdriver) – Kzqai

+2

Bu soru tam olarak bir kopya değil, çünkü 6 yıl önce soruyu sorduğumda, WebDriver'dan önce gelen Selenium RC'den bahsediyordum. Fakat bu aynı zamanda bu sorunun önemsiz olduğunu da gösteriyor çünkü insanların eski API'yi artık kullanamayacağını düşünüyorum. – Pete

cevap

10

Bu testin bu tip Selenyum'un en iyi kullanım biçimi olmayabilir. Test nihai sayfası beklediğinizden sahiptir kontrol edebilir bir 404 Selenyum sırasında başka bir sayfaya yönlendirme ise daha hızlı bir koşu testi

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

yapmak ve olabilecek bir tarayıcı yüklemek için gereksiz ihtiyaç vardır.

1

Muhtemelen captureNetworkTraffic() çağrısına göz atmak isteyebilirsiniz. Şu anda yalnızca Firefox ile güvenilir bir şekilde çalışıyor, 4444 numaralı bağlantı noktasından IE/Safari/etc'ye proxy trafiğini manuel olarak ayarlamadıkça.

Kullanmak için selenium.start ("captureNetworkTraffic = true") çağrısı yapın ve sonra betiğinizde selenium.captureNetworkTraffic ("...") öğesini "..." "düz", "xml" veya "json" olarak adlandırabilirsiniz.

5

Selenium 2, HtmlUnit içerdiğinden, doğrudan yanıt almak için bunu kullanabilirsiniz.

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

Ne yazık ki bu Selenium C# sürümü ile çalışmaz. – Pete

5

Bunun bir şok kesmek olduğunu biliyorum, ama bu benim yaptığım budur:

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

O Ona ihtiyacım durumda işi alır, bunun ideal değil kabul rağmen ...

+0

Sadece vücut metninde "hata" kelimesini aramaya başvurdum. İdeal değil ama işi bitirir. –

+0

Evet, bunu aklımda tuttu ve daha iyi bir şey arıyordum, ama bu şimdi benim için gitmek zorunda olduğum gibi görünüyor. –

-2

şeyin bir unsur olarak sayfada çıkışına, test sırasında, HTTP durumunu sunucu tarafı kodu adapte olabilir başarısız olursa: my 403 İzin Verilmedi sayfadaki Örneğin

, ben var :

<h1 id="web_403">403 Access Denied</h1> 
kolayca WebDriver API üzerinden kontrol edilebilir

: Ben denemedim

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

halkı

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. 
} 
İlgili konular