2012-07-25 9 views
9

एसिंक्रोनस स्क्रिप्ट निष्पादित करने का प्रयास करते समय मुझे सेलेनियम 2.25.0 के साथ अपवाद क्यों मिल रहा है। अगर मैं अपने स्क्रिप्ट से setTimeout को हटा दें और मैं कालबैक यह काम करता है फोनसेलेनियम एसिंक्रोनस स्क्रिप्ट को निष्पादित करने में असमर्थ

 
FAILED: testSeleniumAsync 
org.openqa.selenium.TimeoutException: Script execution failed. Script: var callback = arguments[arguments.length - 1];getResult(callback); 
Timed out waiting for asyncrhonous script result after 2 ms (WARNING: The server did not provide any stacktrace information) 
Command duration or timeout: 11 milliseconds 
Build info: version: '2.25.0', revision: '17482', time: '2012-07-18 22:18:01' 
System info: os.name: 'Linux', os.arch: 'amd64', os.version: '3.2.0-27-generic', java.version: '1.6.0_26' 
Driver info: driver.version: RemoteWebDriver 
Session ID: 6347b507cf22b6c2d3312937a82a0a02 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 

:

 
var result = true; 
function getResult(callback){ 
    window.setTimeout(function(){callback(true);}, 3000); 
} 

यह एक अपवाद फेंकता है:

 
//navigate to my test page. 

String script = "var callback = arguments[arguments.length - 1];" + 
       "getResult(callback)"; 

Object result = ((JavascriptExecutor)driver).executeAsyncScript(script, ""); 

System.out.println(result); 

परीक्षण पृष्ठ निम्न स्क्रिप्ट में शामिल है। लेकिन यह वही नहीं है जो मैं चाहता हूं।

धन्यवाद।

उत्तर

21

यह बहुत अजीब बात है कि एपीआई 2 एमएस में समय समाप्त हो रही है।

मुझे लगता है कि स्क्रिप्ट टाइम आउट किसी भी तरह गलत तरीके से कॉन्फ़िगर किया गया है (< = 0sec)। चूंकि आपका विंडो टाइमआउट 3 सेकेंड के बाद होता है, इसलिए कॉल करने से पहले, स्क्रिप्ट टाइम को 3 सेकंड से अधिक मूल्य पर सेट करने का प्रयास करें।

तो जैसा

:

driver.manage().timeouts().setScriptTimeout(5, TimeUnit.SECONDS); 

कि काम हो सकता है।

+1

मुझे कुछ ऐसा लगता है जो मुझे लगता है कि एक आम गड़बड़ी है, ((जावास्क्रिप्ट एक्स्सेलर) ड्राइवर) .executeAsyncScript (स्क्रिप्ट, ""); // तुरंत वापस आ जाएगा। – redochka

+0

@redsonic +1 किसी भी दिन। लेकिन इस मामले में ओपी कॉलबैक का आह्वान कर रहा है। –

+0

मेरे पास प्रोटैक्टर में एक ही समस्या है, मैं इसे कैसे कॉन्फ़िगर कर सकता हूं? मैंने ब्राउजर.मैनेज()। टाइमआउट्स() सेटस्क्रिप्टटाइमआउट (60000); लेकिन मुझे एक ही त्रुटि है! – Emna