2014-04-08 10 views
10

लोड करने के लिए प्रतीक्षा कर रहा है कभी-कभी सेलेनियम 2.41 के साथ किए गए मेरे परीक्षण में और फ़ायरफ़ॉक्स 28 के साथ परीक्षण किया गया निष्पादन पेज लोड होने के लिए प्रतीक्षा कर रहा है।फ़ायरफ़ॉक्स वेबड्राइवर पृष्ठ को

यह इंतजार शर्त है:

int time = 30;  
WebDriverWait wait = new WebDriverWait(webDriver, time); 
ExpectedCondition<Boolean> pageLoadCondition = new ExpectedCondition<Boolean>() { 
    public Boolean apply(WebDriver driver) { 
     return ((JavascriptExecutor)driver).executeScript("return document.readyState").equals("complete"); 
    } 
}; 
wait.until(pageLoadCondition); 

यह माना जाता है कि 30 सेकंड के बाद इस विधि एक TimeoutException फेंक देंगे, लेकिन ऐसा नहीं है, कभी-कभी हमेशा लटकी हुई है। (Runnable java.net.SocketInputStream.socketRead0 (मूल निवासी विधि) java.net.SocketInputStream.read पर पर अज्ञात स्रोत:

java.lang.Thread.State: यह स्टैकट्रेस इन स्थितियों में उत्पादित है) org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer (AbstractSessionInputBuffer.java:160) org.apache.http.impl.io.SocketInputBuffer.fillBuffer (SocketInputBuffer.java:84 पर) में संगठन पर .apache.http.impl.io.AbstractSessionInputBuffer.readLine (AbstractSessionInputBuffer.java7373) org.apache.http पर .impl.conn.LoggingSessionInputBuffer.readLine (LoggingSessionInputBuffer.java:116) org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead (DefaultHttpResponseParser.java:140) पर org.apache.http.impl.conn पर .DefaultHttpResponseParser.parseHead (DefaultHttpResponseParser.java:57) org.apache.http.impl.io.AbstractMessageParser.parse (AbstractMessageParser.java:260) पर org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader पर (AbstractHttpClientConnection .java: 283) org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader (DefaultClientConnection.java:251) org.apache.htt पर p.impl.conn.AbstractClientConnAdapter.receiveResponseHeader (AbstractClientConnAdapter.java:223) org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse (HttpRequestExecutor.java:271) org.apache.http.protocol.HttpRequestExecutor पर पर। निष्पादित (HttpRequestExecutor.java:123) org.apache.http.impl.client.DefaultRequestDirector.tryExecute (DefaultRequestDirector.java:682) org.apache.http.impl.client.DefaultRequestDirector.execute पर (DefaultRequestDirector पर। जावा: 486) org.apache.http.impl.client.AbstractHttpClient.doExecute (AbstractHttpClient.java:863) org.apache.http.impl.client.CloseableHttpClient .execute (CloseableHttpClient.java:72) org.apache.http.impl.client.CloseableHttpClient.execute (CloseableHttpClient.java:57) पर org.openqa.selenium.remote.HttpCommandExecutor.fallBackExecute पर (HttpCommandExecutor.java : 322) org.openqa.selenium.remote.HttpCommandExecutor.execute (HttpCommandExecutor.java:301) पर org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.execute (NewProfileExtensionConnection.java:165 पर) पर org.openqa.selenium.firefox.FirefoxDriver $ LazyCommandExecutor.execute (FirefoxDriver.java:362) org.openqa.selenium.remote.RemoteWebDriver.execute (RemoteWebDriver.java:5268) org.openqa.selenium.remote.RemoteWebDriver.executeScript (RemoteWebDriver.java:504) es.tao.commonservices.selenium.tests पर।TAORobotWebDriver org.openqa.selenium.support.ui.FluentWait पर es.tao.commonservices.selenium.tests.TAORobotWebDriver $ 1.Apply (TAORobotWebDriver.java:1) पर $ 1.Apply (TAORobotWebDriver.java:6227) । (FluentWait.java:208) es.tao.commonservices.selenium.tests.TAORobotWebDriver.waitToLoad (TAORobotWebDriver.java:6230) es.tao.commonservices.selenium.tests.TAORobotWebDriver.handleWaitToLoad पर पर (TAORobotWebDriver जब तक। जावा: 6110)

मैं फ़ायरफ़ॉक्स प्रोफ़ाइल के लिए यह वरीयता निर्धारित की है, लेकिन यह अभी भी काम नहीं कर रहा:

ffProfile = new FirefoxProfile(); 
ffProfile.setPreference("webdriver.load.strategy", "unstable"); 

इसके अलावा इस गुण सेट है:

webDriver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS); 
webDriver.manage().timeouts().setScriptTimeout(30, TimeUnit.SECONDS); 
+0

क्या आप एक ऐसे समाधान के लिए खुले रहेंगे जो सामान्य ड्राइवर.get (url) का उपयोग करता है लेकिन फिर एक अपेक्षित तत्व लोड होने तक फ्लूएंटवाइट का उपयोग करता है? – gorbysbm

+0

हाय gorbysbm, मैं एक प्रकार का रोबोट विकसित कर रहा हूं जो एप्लिकेशन का परीक्षण करता है। कभी-कभी मेरे पास प्रतीक्षा करने के लिए "तत्व" तत्व नहीं होता है, इसलिए मुझे दस्तावेज़ तैयार होने तक प्रतीक्षा करना होगा। वैसे भी, इस त्रुटि को प्रकट करने के लिए तत्व की प्रतीक्षा होगी क्योंकि मैंने कोशिश की है। धन्यवाद! – vbail

+0

बस एक सिद्धांत है, लेकिन FluentWait का उपयोग पृष्ठ के "बॉडी" तत्व को लोड करने के लिए एक ही चीज़ को पूरा करने के लिए नहीं करेगा? मुझे आपके कोड में धाराप्रवाह दिखाई नहीं देता है, यह इस तरह दिखना चाहिए: http://stackoverflow.com/questions/12041013/selenium-webdriver-fluent-wait-works-as-expected-but-implicit-wait-does-not । आप उस जावास्क्रिप्ट कोड से छुटकारा पाने का प्रयास क्यों नहीं करते हैं और देखें कि क्या फ्लेंटवेट – gorbysbm

उत्तर

1

आप Firefox 27.01 की कोशिश कर सकते हैं। मैंने फ़ायरफ़ॉक्स 28.0 में अपग्रेड किया और यह कुछ परीक्षणों को तोड़ने लग रहा था जो मैं वॉटर-वेबड्राइवर का उपयोग कर कर रहा था। मैं 27.01 पर वापस चला गया और परीक्षण फिर से भाग गए (यदि आप केवल पूरे इंस्टॉलेशन पैकेज को सेटअप के रूप में डाउनलोड करते हैं, तो आपको ऑटो-अपडेट बंद करने की प्रतीत नहीं होती है, इसलिए यह स्वयं को 28.0 पर अपडेट करता है)।

विफलता होवर और find_element का उपयोग कर रहे थे।

0

एक अनसुलझा बग मिला: https://code.google.com/p/selenium/issues/detail?id=6955 - यदि आप कर सकते हैं, तो कृपया एक परीक्षण केस प्रदान करें, मुख्य रूप से एक कम मेजबान पृष्ठ जिसमें कम से कम स्क्रिप्ट होती है जहां समस्या अभी भी होती है, इसलिए इसे विश्वसनीय रूप से दोहराया जा सकता है और पता लगाया जा सकता है।

कभी-कभी मैं खुद से सवाल करता हूं कि क्या Google अपने स्वयं के औजारों का उपयोग करता है .... उन्हें उस बग युग में भाग लेना चाहिए था कि कंपनी कितनी बड़ी है।

संबंधित मुद्दे