सेलेनियम त्रुटि - दूरस्थ वेबड्राइवर के लिए HTTP अनुरोध 60 सेकंड के बाद समाप्त हो गया


85

मैं कई महीनों से सेलेनियम का उपयोग कर रहा हूं, जिसका उपयोग हम अपनी कुछ आंतरिक परीक्षण प्रक्रियाओं को स्वचालित करने के लिए कर रहे हैं। स्क्रिप्ट ठीक गुजर रही है। मैंने हाल ही में एफ # 27.01 का उपयोग करके सी # 2.40.0 वेबड्राइवर में अपग्रेड किया है और हमारी स्क्रिप्ट अब निम्न त्रुटि के साथ यादृच्छिक स्थानों पर विफल हो रही है।

[Portal.SmokeTest.SmokeRunTest.Booking] TearDown method failed. OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/element timed out after 60 seconds.
  ----> System.Net.WebException : The operation has timed out
TearDown : OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/window timed out after 60 seconds.
  ----> System.Net.WebException : The operation has timed out
[09:01:20]
[Portal.SmokeTest.SmokeRunTest.Booking] TearDown method failed. OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/element timed out after 60 seconds.
  ----> System.Net.WebException : The operation has timed out
TearDown : OpenQA.Selenium.WebDriverException : The HTTP request to the remote WebDriver server for URL htt(p)://localhost:7055/hub/session/56e99e88-ba17-4d12-bef1-c6a6367ccc2f/window timed out after 60 seconds.
  ----> System.Net.WebException : The operation has timed out
   at OpenQA.Selenium.Support.UI.DefaultWait`1.PropagateExceptionIfNotIgnored(Exception e)
   at OpenQA.Selenium.Support.UI.DefaultWait`1.Until[TResult](Func`2 condition)
   at Portal.Test.Helpers.Process_Bookings.OpenBookings.SelectBooking(String bookingnumber)
   at Portal.SmokeTest.SmokeRunTest.Booking() in d:\TeamCityAgent\work\dac1dcea7f2e80df\SmokeTests\SmokeRunTest.cs:line 68
--WebException
   at System.Net.HttpWebRequest.GetResponse()
   at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)
--TearDown
   at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)
   at OpenQA.Selenium.Remote.HttpCommandExecutor.Execute(Command commandToExecute)
   at OpenQA.Selenium.Firefox.Internal.ExtensionConnection.Execute(Command commandToExecute)
   at OpenQA.Selenium.Remote.RemoteWebDriver.Execute(String driverCommandToExecute, Dictionary`2 parameters)
   at OpenQA.Selenium.Remote.RemoteWebDriver.Close()
   at Portal.Test.Helpers.Setup.CloseWebdriver()
   at Portal.SmokeTest.SmokeRunTest.TearDown() in d:\TeamCityAgent\work\dac1dcea7f2e80df\SmokeTests\SmokeRunTest.cs:line 162
--WebException
   at System.Net.HttpWebRequest.GetResponse()
   at OpenQA.Selenium.Remote.HttpCommandExecutor.CreateResponse(WebRequest request)

नवीनतम त्रुटि मैंने कोड की एक एकल पंक्ति को ट्रैक करने में कामयाब की है:

_setup.driver.FindElement(By.XPath("//button[@class='buttonSmall lockBookingButton']")).Click();

कष्टप्रद बात यह है, समस्या को ठीक करने की कोशिश करना मुश्किल साबित हो रहा है, जैसे कि मैं अपने स्थानीय मशीन पर परीक्षण चलाता हूं, डिबग में यह गुजरता है। इसके अतिरिक्त, अगर मैं इसे NUNIT धावक के माध्यम से चला रहा हूँ, तो निर्माण मशीन पर मैं टेस्ट बंद कर रहा हूँ, यह भी गुजरता है। यह केवल Teamcity का उपयोग करते समय हमारी स्वचालित बिल्ड रनिंग प्रक्रिया के भाग के रूप में विफल प्रतीत होता है। जैसा मैंने कहा, यह पहले से महीनों से ठीक चल रहा है, और केवल एक चीज जो बदल गई है वह है सेलेनियम वेबड्राइवर किट।

मैंने डिबग में रहते हुए पहले इस समस्या का अनुभव किया है, और जब Click()कोड की एक लाइन बुलाई गई, तो फ़ायरफ़ॉक्स लॉक करने के लिए दिखाई दिया, और केवल परीक्षण को रोकना फ़ायरफ़ॉक्स को जारी रखने की अनुमति देगा। वेबड्राइवर स्रोत को संशोधित करने सहित कई सुझाव यहां दिए गए हैं? यदि संभव हो तो उस मार्ग से नीचे नहीं जाना चाहूंगा यदि कोई और कोई सुझाव दे सकता है।


इस सेटअप का उपयोग करते हुए कई स्वतंत्र परियोजनाओं में हमारे पास एक ही मुद्दा था और अभी भी इसके लिए कोई समाधान नहीं है। हमारी सबसे अच्छी शर्त वेबड्राइवर और फ़ायरफ़ॉक्स असेंबली के पुराने संस्करणों को डाउनग्रेड करना था। हमें यह भी नहीं पता है कि यह व्यवहार वेबड्राइवर या फ़ायरफ़ॉक्स के कारण होता है या नहीं।
डियो एफ

जवाबों:


23

मेरे पास Chrome ड्राइवर (v2.23) का उपयोग करके एक समान मुद्दा था / टीमसिटी के माध्यम से परीक्षण चला रहा था। मैं Chrome विकल्पों में "नो-सैंडबॉक्स" ध्वज को जोड़कर समस्या को हल करने में सक्षम था:

var options = new ChromeOptions();
options.AddArgument("no-sandbox");

मुझे यकीन नहीं है कि अगर एफएफ ड्राइवर के लिए एक समान विकल्प है। क्या मैं इस मुद्दे को समझने के लिए टीम अकाउंट को सेलेनियम को सिस्टम खाते के तहत चलाने के साथ कुछ करना है।


यह मेरी समस्या को हल करता है। महीनों की कोशिशों के बाद भी मैं क्रोम टेस्ट नहीं चला पा रहा था। धन्यवाद मुकाबला 2
एटीन

1
मेरा कोड एक IIS होस्ट किए गए env में ठीक चल रहा था और अचानक बंद हो गया, लेकिन फिर भी मेरी यूनिट परीक्षणों में काम किया। इस लाइन को जोड़ने से यह IIS env में फिर से काम करता है। धन्यवाद!
लेजेंड्स

1
मैंने इसे var options = new ChromeOptions(); options.AddArgument("--no-sandbox");C # संस्करण Webdriver 3.14 में अब कार्य के रूप में वितरित किया।
moto_geek

20
new FirefoxDriver(new FirefoxBinary(),new FirefoxProfile(),TimeSpan.FromSeconds(180));

कोड की उपरोक्त पंक्तियों का उपयोग करके अपना ब्राउज़र लॉन्च करें। इसने मेरे लिए काम किया।


हमारे लिए भी तय किया। जब एक मूल स्क्रिप्ट चल रही थी जो सिर्फ एक एफएफ ड्राइवर और कुछ और नहीं बनाई गई थी, तो 60 सेकंड के टाइमआउट ने 100% समय काम किया। हमारे संसाधन-भारी स्क्रिप्ट को चलाते समय, जो एफएफ खोलने से तुरंत पहले डेटाबेस / रीड / राइटिंग के लिए कनेक्शन खोलता है या बहुत अधिक करता है, एक 60 टाइमआउट विफलताओं का कारण होगा ~ 50% समय। समयावधि को 3 मिनट तक बढ़ाने से समस्या ठीक हो गई। ऐसा लगता है कि इंजन को गर्म करने के लिए वेबड्राइवर को थोड़ा और समय चाहिए।
कायकिनकोडर

13

मैंने पहली बार इस मुद्दे का सामना महीनों पहले किया था ( click()कमांड पर भी ), और यह मेरे लिए कभी भी एक मुद्दा रहा है। ऐसा लगता है कि .NET सेलेनियम बाइंडिंग के साथ कुछ समस्या है। IE ड्राइवर पर काम करने वाले लड़के का यह ब्लॉग पोस्ट यह बताने में सहायक है कि क्या हो रहा है:

http://jimevansmusic.blogspot.com/2012/11/net-bindings-whaddaymean-no-response.html

दुर्भाग्य से, इस समस्या का वास्तविक समाधान नहीं है। जब भी इस मुद्दे को सेलेनियम डेवलपर्स के लिए उठाया गया है ( यहाँ देखें ), यह एक विशिष्ट प्रतिक्रिया है :

हमें एक प्रतिलिपि प्रस्तुत करने योग्य परिदृश्य की आवश्यकता है, जिसमें एक नमूना पृष्ठ या किसी सार्वजनिक साइट के पृष्ठ का लिंक शामिल होना चाहिए जहां इस मुद्दे को पुन: प्रस्तुत किया जा सकता है।

यदि आप एक लगातार प्रतिलिपि प्रस्तुत करने योग्य परीक्षण मामला प्रस्तुत करने में सक्षम हैं, तो इस बग को अच्छे के लिए आराम करने में बहुत मददगार हो सकता है।

उस ने कहा, शायद आप इस बीच इस समाधान की कोशिश कर सकते हैं। यदि आप जिस HTML बटन को आज़मा रहे हैं , उसमें click()एक onclickविशेषता है, जिसमें जावास्क्रिप्ट होता है, तो आदेश को कॉल करने के बजाय सीधे उस कोड को निष्पादित करने के लिए JavascriptExecutor का उपयोग करने पर विचार करें click()। मैंने पाया कि onclickजावास्क्रिप्ट को निष्पादित करने से सीधे मेरे कुछ परीक्षण पास हो सकते हैं।


9

फ़ायरफ़ॉक्स के साथ एक ही मुद्दा था। मैंने विकल्पों के साथ क्रोम पर स्विच किया और तब से सब ठीक है।

ChromeOptions options = new ChromeOptions();
 options.AddArgument("no-sandbox");

 ChromeDriver driver = new ChromeDriver(ChromeDriverService.CreateDefaultService(), options, TimeSpan.FromMinutes(3));
 driver.Manage().Timeouts().PageLoad.Add(System.TimeSpan.FromSeconds(30));

मुझे यहाँ गलत होने की संभावना है, लेकिन ऐसा लगता है कि अंतिम पंक्ति का कोई प्रभाव नहीं होगा। PageLoad स्वयं एक TimeSpan है, और TimeSpan पर एक शुद्ध फ़ंक्शन है, जो PageLoad को संशोधित नहीं करता है यह केवल एक नया TimeSpan देता है जिसे त्याग दिया जा रहा है।
जेसन रिची

3

मेरे मामले में, मेरा बटन के प्रकार है submitनहीं buttonऔर मैं बदलने Clickके लिए Sumbitतो हर काम अच्छा है। नीचे कुछ ऐसा है,

से driver.FindElement(By.Id("btnLogin")).Click();

सेवा driver.FindElement(By.Id("btnLogin")).Submit();

BTW, मुझे इस पोस्ट में सभी उत्तर देने की कोशिश की गई है लेकिन मेरे लिए काम नहीं है।


3

इसी तरह का मुद्दा मिला। ड्राइवर के निर्माण में अधिक समय निर्धारित करने का प्रयास करें - उदाहरण के लिए जोड़ें।

var timespan = TimeSpan.FromMinutes(3);

var driver = new FirefoxDriver(binary, profile, timeSpan);

नमस्ते वहाँ beuu, नीचे प्रारूप की तरह होगा? driver.Manage () टाइमआउट () ImplicitlyWait (TimeSpan.FromSeconds (5))।।
नाथन

4
नहीं, यह प्रतीक्षा नहीं ImplicitlyWait तत्वों को खोजने के साथ जुड़ा हुआ है। आपको डिफ़ॉल्ट (60sec) ड्राइवर टाइमआउट को बदलने की आवश्यकता है, जब वह आगे बढ़ने के लिए अनुरोध का इंतजार करता है (यदि मैं गलत नहीं हूं)। वैसे भी आपको एक लाइन ढूंढनी होगी जहां आप एफएफ ड्राइवर का कंस्ट्रक्टर सेट करते हैं और वहां अधिक विशेषताओं को जोड़ते हैं या टाइमआउट बदलते हैं। कुछ इस तरह:driver = new FirefoxDriver(new FirefoxBinary(), new FirefoxProfile(path to your profile), TimeSpan.FromMinutes(3));
बार्ट वोजटला

2
क्रोमड्राइवर के लिए यह ऐसा दिखेगाdriver = new ChromeDriver(service, chromeDriverOptions, TimeSpan.FromMinutes(3));
redwards510

2

मुझे लगता है कि यह समस्या तब होती है जब आप अपने वेब ड्राइवर ऑब्जेक्ट को एक्सेस करने की कोशिश करते हैं

1) एक खिड़की बंद हो गई है और आप अभी तक माता-पिता के पास नहीं गए हैं

2) आपने एक ऐसी खिड़की पर स्विच किया है जो काफी तैयार नहीं थी और जब से आप स्विच की गई है, तब तक इसे अपडेट किया गया है

वह होने की प्रतीक्षा windowhandles.countकर रहे हैं जो आप उम्मीद कर रहे हैं कि पृष्ठ की सामग्री को ध्यान में नहीं रखा गया है और न ही document.ready है। मैं अब भी इस समस्या का हल खोज रहा हूँ


2

मेरे मामले में, ऐसा इसलिए है क्योंकि मैंने क्रोम अपडेट फ़ोल्डर को हटा दिया है। क्रोम पुनः इंस्टॉल होने के बाद, यह ठीक काम कर रहा है।


1

समस्या यह है कि Click()आपके बिल्ड env पर समय का मूल्यांकन .. आप जो चाहते हैं उस पर खुदाई करना चाहते हैं Click()

इसके अलावा, Click()क्योंकि व्यक्तिगत रूप से मूल्यांकन में नेटवर्क की गति, आदि के आधार पर अधिक समय लगता है , इसके लिए Retrys को जोड़ने का प्रयास करें


नमस्ते, रिट्रीट विकल्प अभ्यस्त ब्राउज़र के रूप में काम करता है। केवल परीक्षण रोकना ब्राउज़र को जारी रखने में सक्षम बनाता है।
नाथन

1

मेरे मामले में मुझे यह त्रुटि मिली कि हमारी टीम सर्वर का निर्माण कर रही है। परीक्षणों ने हमारे स्थानीय देव मशीनों पर काम किया।

समस्या यह थी कि लक्ष्य वेबसाइट को बिल्ड सर्वर पर सही तरीके से कॉन्फ़िगर नहीं किया गया था, इसलिए यह ब्राउज़र को सही तरीके से नहीं खोल सकता था।

हम क्रोम ड्राइवर का उपयोग कर रहे थे लेकिन मुझे यकीन नहीं है कि इससे कोई फर्क पड़ता है।


1

मेरे मामले में यह समस्या SendKeys () और रिमोट डेस्कटॉप के साथ थी । मेरे पास अब तक का वर्कअराउंड पोस्ट करना:

मेरे पास एक सेलेनियम परीक्षण था जो विफल हो जाएगा जब जेनकेन्स नौकरी के हिस्से के रूप में vSphere में होस्ट किए गए नोड पर और RDP के माध्यम से प्रशासित किया जाएगा। कुछ समस्या निवारण के बाद यह पता चला कि यदि दूरस्थ डेस्कटॉप कनेक्ट और फ़ोकस किया गया है, तो यह सफल होता है, लेकिन अपवाद के साथ विफल हो जाता है यदि दूरस्थ डेस्कटॉप डिस्कनेक्ट हो जाता है या कम से कम हो जाता है।

वर्कअराउंड के रूप में, मैंने आरडीपी के बजाय vSphere कंसोल के माध्यम से लॉग इन किया और फिर vSphere को बंद करने के बाद भी परीक्षण अब तक विफल नहीं हुआ। यह एक वर्कअराउंड है, लेकिन मुझे सावधान रहना चाहिए कि आरडीपी के माध्यम से लॉगिन न करें और हमेशा केवल vSphere कंसोल के माध्यम से व्यवस्थापन करें।



0

new FirefoxDriver(binary, profile, timeSpan)अप्रचलित हो गया है।

अब आप new FirefoxDriver(FirefoxDriverService.CreateDefaultService(), FirefoxOptions options, TimeSpan commandTimeout)इसके बजाय उपयोग कर सकते हैं ।

वहाँ भी है new FirefoxDriver(string geckoDriverDirectory, FirefoxOptions options, TimeSpan commandTimeout)और यह काम करता है। लेकिन यह अनिर्दिष्ट है, और आपको geckoDriverDirectoryपहले से ही इसे मैन्युअल रूप से निर्दिष्ट करने की आवश्यकता है Path


0

हम भी यही समस्या थी। हमारे मामले में, ब्राउज़र एक लॉगिन पॉपअप (विंडोज प्रमाणीकरण) द्वारा अवरुद्ध किया गया था, इसलिए 60 सेकंड के बाद वापस नहीं लौटा। Windows खाता Chrome में सही एक्सेस अधिकार जोड़ना समस्या को हल करने के तहत चल रहा था।


0

Arrrgh! आज मैकओएस पर इसका सामना करना पड़ा और यह मुद्दा उतना ही सरल था - नया अप्पम संस्करण स्थापित करने का सुझाव देने वाली पॉप-अप विंडो रिमोट CI बिल्ड सर्वर पर दिखाई दे रही थी।

बस इसे VNC'ing और " बाद में इंस्टॉल करें " पर क्लिक करके इसे ठीक कर दिया।


0

मेरे मामले में ऊपर दिए गए किसी भी उत्तर ने मेरी समस्या को पूरी तरह से हल नहीं किया। मैंने ( no-sandbox) मोड, विस्तारित टाइमआउट अवधि ( driver = new RemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), capability, TimeSpan.FromMinutes(3));) और पेज लोड टाइमआउट ( driver.Manage().Timeouts().PageLoad.Add(System.TimeSpan.FromSeconds(30));) के साथ कनेक्शन का उपयोग करके समाप्त किया , इसलिए अब मेरा कोड इस तरह दिखता है:

    public IWebDriver GetRemoteChromeDriver(string downloadPath)
    {
        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.AddArguments(
            "start-maximized",
            "enable-automation",
            "--headless",
            "--no-sandbox", //this is the relevant other arguments came from solving other issues
            "--disable-infobars",
            "--disable-dev-shm-usage",
            "--disable-browser-side-navigation",
            "--disable-gpu",
            "--ignore-certificate-errors");
        capability = chromeOptions.ToCapabilities();

        SetRemoteWebDriver();
        SetImplicitlyWait();
        Thread.Sleep(TimeSpan.FromSeconds(2));
        return driver;
    }
    
    private void SetImplicitlyWait()
    {
        driver.Manage().Timeouts().PageLoad.Add(TimeSpan.FromSeconds(30));
    }


    private void SetRemoteWebDriver()
    {
        driver = new RemoteWebDriver(new Uri("http://localhost:4444/wd/hub"), capability, TimeSpan.FromMinutes(3));
    }

लेकिन जैसा कि मैंने उल्लेख किया है कि उपरोक्त विधि में से किसी ने भी मेरी समस्या को हल नहीं किया है, मुझे लगातार त्रुटि मिली, और कई क्रोमेड्राइवर। Exe और chrome.exe प्रक्रियाएं सक्रिय थीं (क्रोमेड्रिवर के ~ 10 और क्रोम के ~ 50)।

तो कहीं मैंने पढ़ा है कि ड्राइवर को निपटाने के बाद मुझे अगला टेस्ट शुरू करने से पहले कुछ सेकंड इंतजार करना चाहिए, इसलिए मैंने विधि को निपटाने के लिए निम्नलिखित लाइन जोड़ी:

    driver?.Quit();
    driver?.Dispose();
    Thread.Sleep(3000);

इस स्लीप मॉडिफिकेशन के साथ मुझे अब टाइमआउट त्रुटि नहीं मिली है और कोई अनावश्यक रूप से खोला गया क्रोमेड्राइवर। Exe और chrome.exe त्रुटि नहीं है।

मुझे आशा है कि मैंने किसी ऐसे व्यक्ति की मदद की जो इस मुद्दे पर उस समय तक संघर्ष करता रहा जैसा मैंने किया।


0

मेरे पास एक ही अपवाद था जब एक विंडोज़ सर्वर (अनुसूचित) पर एक निर्धारित कार्य के साथ एक हेडलेस क्रोमड्राइव चलाने की कोशिश की गई थी। मेरे लिए जो हल किया गया है वह उपयोगकर्ता " प्रशासक " के रूप में कार्य को चलाने के लिए है (अंत में एस को नोटिस करें)। मैंने जो भी किया (मुझे नहीं पता कि क्या उसके प्रासंगिक हैं) को "शर्तें" टैब से "कोई भी कनेक्शन" चुना गया है।


-1

ChromDriver के लिए नीचे मेरे लिए काम किया गया है:

string chromeDriverDirectory = "C:\\temp\\2.37";
 var options = new ChromeOptions();
 options.AddArgument("-no-sandbox");
 driver = new ChromeDriver(chromeDriverDirectory, options, 
 TimeSpan.FromMinutes(2));

सेलेनियम संस्करण 3.11, क्रोमड्राइव 2.37

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.