2015-02-27 6 views
6

मैं फैंटॉमजेएस के लिए नया हूं और मैं अपने सेलेनियम परीक्षण (पायथन) को फैंटोमज ड्राइवर का उपयोग करके चलाने की कोशिश कर रहा हूं लेकिन यह वेब तत्व नहीं होगा।प्रेत जेएस ड्राइवर कभी-कभी तत्वों को ढूंढने में असमर्थ है

Ghostdriver लॉग्स:

[INFO - 2015-02-27T15:24:40.236Z] GhostDriver - Main - running on port 52653 
[INFO - 2015-02-27T15:24:41.075Z] Session [bfd397f0-be94-11e4-ad03-b711254501c8] - page.settings - {"XSSAuditingEnabled":false,"javascriptCanCloseWindows":true,"javascriptCanOpenWindows":true,"javascriptEnabled":true,"loadImages":true,"localToRemoteUrlAccessEnabled":false,"userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X) AppleWebKit/538.1 (KHTML, like Gecko) PhantomJS/2.0.0 Safari/538.1","webSecurityEnabled":true} 
[INFO - 2015-02-27T15:24:41.075Z] Session [bfd397f0-be94-11e4-ad03-b711254501c8] - page.customHeaders: - {} 
[INFO - 2015-02-27T15:24:41.075Z] Session [bfd397f0-be94-11e4-ad03-b711254501c8] - Session.negotiatedCapabilities - {"browserName":"phantomjs","version":"2.0.0","driverName":"ghostdriver","driverVersion":"1.2.0","platform":"mac-10.9 (Mavericks)-64bit","javascriptEnabled":true,"takesScreenshot":true,"handlesAlerts":false,"databaseEnabled":false,"locationContextEnabled":false,"applicationCacheEnabled":false,"browserConnectionEnabled":false,"cssSelectorsEnabled":true,"webStorageEnabled":false,"rotatable":false,"acceptSslCerts":false,"nativeEvents":true,"proxy":{"proxyType":"direct"}} 
[INFO - 2015-02-27T15:24:41.075Z] SessionManagerReqHand - _postNewSessionCommand - New Session Created: bfd397f0-be94-11e4-ad03-b711254501c8 
[ERROR - 2015-02-27T15:24:47.242Z] WebElementLocator - _handleLocateCommand - Element(s) NOT Found: GAVE UP. Search Stop Time: 1425050687190 

    :262 in error 

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

कोई विचार यह क्या कारण है?

वैसे, इन परीक्षणों क्रोम और एफएफ

+0

'WebDriverWait' – Olexandr

उत्तर

0

के साथ ठीक से चलाने मैं उन तत्वों phantomJS चालक द्वारा find_element तरीकों का उपयोग कर परीक्षण मामलों में स्थित नहीं किया जा रहा है पर ध्यान दिया है, कि JavascriptExecutor का उपयोग कर जावास्क्रिप्ट द्वारा पहुँचा जा सकता। तत्व तक पहुंचने के लिए और तत्व पर कार्रवाई के लिए जावा स्क्रिप्ट का उपयोग करें। मुझे उम्मीद है कि आपकी समस्या का समाधान होगा।

+0

के बजाय' time.sleep (5) 'को अपने उत्तर के लिए धन्यवाद। लेकिन यह समाधान मेरे लिए काम नहीं करेगा। मुझे इसे काम करने के लिए बहुत सारे बदलाव करना होगा :( – rootimbo

0

यह संभव है कि आपका सेलेनियम परीक्षण लोड होने से पहले तत्व ढूंढने का प्रयास करता है। पहले असफल प्रयास के बाद आपको बार-बार कोशिश करनी चाहिए और जब तक आप या तो तत्व या टाइमआउट पार नहीं करते हैं तब तक आगे बढ़ें।

स्प्लिंटर https://splinter.readthedocs.org/en/latest/index.html पर देखें यह सेलेनियम के साथ काम करता है और तत्वों के इंतजार के तर्क को लागू करता है।

+0

मैं तत्व का पता लगाने के लिए 10 सेकंड का इंतजार कर रहा हूं, उसके बाद टाइमआउट अपवाद फेंक दिया गया है। फ़ाइल "/Library/Python/2.7/site-packages/selenium/ वेबड्राइवर/सपोर्ट/प्रतीक्षा.py ", लाइन 71, तक टाइमआउट अपवाद (संदेश) टाइमआउट अपवाद: संदेश: – rootimbo

3

तो ... ऐसा लगता है कि सेलेनियम वेबड्राइवर का उपयोग करने वाले किसी भी तत्व की प्रतीक्षा वास्तव में एक मतदान योजना का उपयोग कर रही है। याद रखें कि सेलेनियम स्पष्ट प्रतीक्षा कोड है जिसे आप कोड में आगे बढ़ने से पहले एक निश्चित शर्त के लिए प्रतीक्षा करने के लिए परिभाषित करते हैं। डिफ़ॉल्ट रूप से WebDriverWait प्रत्येक 500 मिलीसेकंड की अपेक्षित कंडिशन को सफलतापूर्वक लौटाए जाने तक कॉल करता है। (reference.) इसका मतलब है कि हर 500 एमएसईसी है, सेलेनियम प्रतीक्षा की स्थिति का परीक्षण करता है। यदि सही है, तो आगे बढ़ें। यदि अभी तक सत्य नहीं है, तो एक और मतदान आवृत्ति चक्र की प्रतीक्षा करें, फिर पुन: प्रयास करें।

और मेरे परीक्षण से, मेरे विश्वास है कि एक सर्वेक्षण परीक्षण और नहीं के लिए तैयार-अभी तक तो यह फोन एक निश्चित रूप से

[ERROR - 2016-08-14T08:50:12.896Z] WebElementLocator - _handleLocateCommand - Element(s) NOT Found: GAVE UP. Search Stop Time: 1471164612878 

मैं एक परियोजना पर काम कर रहा हूँ मेरी ghostdriver.log में एक त्रुटियाँ पैदा करता असफल जो एक जटिल एकल पृष्ठ AJAX साइट स्क्रैप करता है। चूंकि साइट आम div तत्वों का पुन: उपयोग करती है, इसलिए मुझे पूरी तरह से कॉल (स्पष्ट, पेस्ट मान, क्लिक, प्रतीक्षा करें, पृष्ठ पर एक अलग तालिका पर जाएं, रुचि के डेटा की प्रतिलिपि बनाएँ, दोहराना ...) प्राप्त करना है डेटा जो मुझे चाहिए।

driver.wait.until(EC.presence_of_element_located((By.XPATH, "//*[@id='special_content_id']//td[contains(.,'" + info.unitId + "')]"))) 

ऐसा लगता है कि मतदान आवृत्ति वर्ग selenium.webdriver.support.wait.WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

Reference here.

मैं व्यवहार के बारे में उत्सुक था में स्थापित किया जाएगा: और क्योंकि साइट एक तरह से धीमी है, मैं के माध्यम से इंतजार तत्वों को लागू। जब मेरी poll_frequency को 0.5 सेकंड पर सेट किया गया था, तो मुझे 98 WebElementLocator त्रुटियां मिलीं। जब मैंने इसे 7.5 सेकंड, driver.wait = WebDriverWait(driver, 60, 7.5) पर स्विच किया, तो मुझे केवल 36 त्रुटियां मिलीं। छोटे मतदान के समय और त्रुटियां उत्पन्न करते हैं।

मुझे वास्तव में अजीब लगता है कि मैं सामान्य मतदान व्यवहार (सेलेनियम) को कहीं भी लॉग त्रुटि सेट करने की अपेक्षा नहीं करता (PhantomJS)। मेरी इच्छा है कि मतदान के लिए एक अलग लॉग प्रविष्टि थी, तत्व-अभी तक तैयार नहीं है ...

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