2010-03-01 11 views
38

में HTTP स्थिति कोड की जांच करना सेलेनियम में HTTP स्थिति कोड कैसे प्राप्त करें?सेलेनियम

उदा। तो मैं परीक्षण कर सकता हूं कि यदि ब्राउजर अनुरोध/उपयोगकर्ता/27 और आईडी = 27 के साथ कोई उपयोगकर्ता मौजूद नहीं है, तो HTTP 404 वापस आ गया है?

मेरी प्राथमिक रुचि सेलेनियम आरसी है, लेकिन अगर कोई "सामान्य" सेलेनियम के उत्तर को जानता है, तो शायद मैं इसे आसानी से आरसी में अनुवाद कर सकता हूं।

/पीट

+0

की संभावित डुप्लिकेट [जाँच हो रही है HttpResponse ठीक (200) के साथ सेलेनियम WebDriver] (http://stackoverflow.com/questions/14537336/checking-httpresponse-ok-200-with-selenium-webdriver) – Kzqai

+2

यह प्रश्न बिल्कुल एक डुप्लिकेट नहीं है, क्योंकि जब मैंने 6 साल पहले सवाल पूछा था, तो मैं सेलेनियम आरसी के बारे में बात कर रहा था जो वेबड्राइवर की भविष्यवाणी करता है। लेकिन यह भी इस सवाल को अप्रासंगिक बनाता है क्योंकि मुझे नहीं लगता कि लोग अब पुराने एपीआई का उपयोग करेंगे। – 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

शायद आप कैप्चरनेटवर्क ट्रैफिक() कॉल को देखना चाहते हैं। फिलहाल यह केवल फ़ायरफ़ॉक्स के साथ विश्वसनीय रूप से काम करता है, जब तक आप मैन्युअल रूप से पोर्ट 4444 के माध्यम से प्रॉक्सी यातायात में आईई/सफारी/आदि सेट अप नहीं करते हैं।

इसका उपयोग करने के लिए, बस selenium.start ("captureNetworkTraffic = true") पर कॉल करें, और उसके बाद बाद में अपनी स्क्रिप्ट में आप selenium.captureNetworkTraffic ("...") कह सकते हैं जहां "..." "सादा", "xml", या "json" है।

5

चूंकि सेलेनियम 2 में एचटीएमएलयूनीट शामिल है, इसलिए आप सीधे प्रतिक्रिया तक पहुंच प्राप्त करने के लिए इसका उपयोग कर सकते हैं।

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

दुर्भाग्यवश सेलेनियम के सी # संस्करण के साथ काम नहीं करता है। – 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> 

आसानी से 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

0

मैं इसे करने की कोशिश नहीं की है, लेकिन आप Firefox के लिए अपने आप को सीमित करने, और स्थापित करने से परहेज नहीं करते, तो फायरबग और नेटएक्सपोर्ट, फिर सेलेनियम पेज स्टेटस कोड (और फायरबग के नेट पैनल में बाकी सब कुछ) तक पहुंच प्राप्त कर सकते हैं: http://selenium.polteq.com/en/using-netexport-to-export-firebugs-net-panel/

-2

वें प्रयास करें , है लोग

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