2013-09-25 3 views
32

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

browser = webdriver.Firefox() 
browser.get("url") 
browser.find_the_element_by_id("add_button").click() 
try: 
    alert = browser.switch_to_alert() 
    alert.accept() 
    print "alert accepted" 
except: 
    print "no alert" 

लेकिन यह काम नहीं किया है और मैं "UnexpectedAlertPresentException" मिला है। मैं भी इस की कोशिश की:

browser = webdriver.Firefox() 
browser.get("url") 
browser.find_the_element_by_id("add_button").click() 
s = set(browser.window_handles) 
s.remove(browser.current_window_handle) 
browser.switch_to_window(s.pop()) 

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

from selenium import webdriver 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 
from selenium.common.exceptions import TimeoutException 

browser = webdriver.Firefox() 
browser.get("url") 
browser.find_the_element_by_id("add_button").click() 

try: 
    WebDriverWait(browser, 3).until(EC.alert_is_present(), 
            'Timed out waiting for PA creation ' + 
            'confirmation popup to appear.') 

    alert = browser.switch_to.alert 
    alert.accept() 
    print("alert accepted") 
except TimeoutException: 
    print("no alert") 

WebDriverWait(browser,) पर के लिए इंतजार करेंगे:

+2

क्या आपने क्लिक और switch_to_alert के बीच एक छोटी देरी की कोशिश की है? – Richard

+0

अभी तक नहीं, इस सुझाव @ रिचर्ड के लिए धन्यवाद। मुझे लगता है कि मैं उस कोड का उपयोग कर सकता हूं जो एआर। मुझे –

+0

@ रिचर्ड को 'switch_to_alert()' 'स्वीकार करने()' के बीच देरी होनी चाहिए? अन्यथा कोई समस्या हो सकती है, आपको लगता है? –

उत्तर

46

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

+0

धन्यवाद @ एआर। यह पूरी तरह से मेरे लिए काम किया। मैं इस समस्या में 10 घंटे की तरह फंस गया हूं। –

+0

किसी वेबपृष्ठ पर मौजूद सभी अलर्ट का पता लगाना संभव है (स्वचालित पॉपअप, बटन पर क्लिक किए बिना)? –

+8

जानकारी का बस एक छोटा सा टुकड़ा- switch_to_alert() अब बहिष्कृत हो गया है और इसे switch_to.alert – demouser123

1

जावा में हम इस

 WebDriverWait wait3 = new WebDriverWait(driver, 7000); 
     wait3.until(ExpectedConditions.alertIsPresent()); 
     driver.switchTo().alert().accept(); 

यह परोक्ष चेतावनी के लिए इंतजार करेंगे की तरह यह कर यदि चेतावनी मौजूद नहीं है फेंक होगा जो हम पकड़ने और आगे ले जा सकते हैं 'चेतावनी वर्तमान Exceptio नहीं है।'

उम्मीद है कि यह मदद करता है।

+0

के बाद कोई भी ब्रांड्स @ अभिषेक सिंह धन्यवाद। मैंने अजगर में ऐसा किया और यह समाधान था। –

4

मुझे पता है कि यह बहुत देर हो चुकी है और आपने इस सवाल को कई साल पहले हल कर लिया है, लेकिन मैं अभी भी संभावित भविष्य के पाठकों के संदर्भ के लिए अपना विश्लेषण और निष्कर्ष पोस्ट करना चाहता हूं।

मैं एक Django वेबसाइट विकास परियोजना पर काम कर रहा हूं, और वर्तमान में एक बग है कि एक बार एक विशेष वेब पेज खोला जाता है, एक त्रुटि संदेश बॉक्स पॉप अप हो जाता है। मेरे वातावरण है:

  • Django 1.8
  • अजगर 2.7
  • सेलेनियम 2.46.0

मैं "UnexpectedAlertPresentException" के बारे में दस्तावेज़ here पढ़ा है, और यह कहते हैं:

जब एक अप्रत्याशित चेतावनी दिखाई देती है तो फेंक दिया जाता है।

आमतौर पर तब उठाया जाता है जब एक अपेक्षित मोडल वेबड्राइवर फॉर्म को अवरुद्ध कर रहा है और अधिक कमांड निष्पादित करता है।

मैं अपने प्रोजेक्ट में परीक्षण किया गया है और मेरे निष्कर्ष हैं:

  • जब चेतावनी बॉक्स निर्भर है, find_element_by_X तरीकों सफल होने के कर सकते हैं।
  • क्लिक() या send_keys() "अप्रत्याशितAlertPresentException" के साथ विफल हो जाएगा।

इसलिए, मुझे लगता है कि क्योंकि "UnexpectedAlertPresentException"

browser.find_the_element_by_id("add_button").click() 

की पंक्ति में फेंक दिया जाता है try...catch ब्लॉक काम नहीं करता है यह भी मतलब है कि चेतावनी बॉक्स वेब पेज के रूप में जैसे ही दिखाई दे सकते हैं इस लाइन द्वारा खोला जाता है:

browser.get("url") 

दूसरे शब्दों में, वहाँ एक समस्या यह है कि पीछे गहरी छिपा हो सकता है जैसे ही पेज खोला है चेतावनी बॉक्स अप का कारण बना। आपको पहले उस समस्या को ठीक करने की आवश्यकता हो सकती है।

एक और बात है:

browser.find_the_element_by_id("add_button").click() 

फिर alert = browser.switch_to_alert() कोई अपवाद नहीं फेंक दिया है, जो आप यहाँ क्या वर्णन करने के लिए विपरीत है के साथ अच्छी तरह से काम करना चाहिए: चेतावनी बॉक्स मान लिया जाये कि इस लाइन दिखाया के बाद। इससे मुझे यह भी लगता है कि समस्या browser.get("url") लाइन जितनी जल्दी है।

मैं बहुत यकीन है कि चुने जाने का तरीका समाधान क्योंकि मेरे विश्लेषण से पता चलता समस्या एक अलग जगह में निहित है आप समस्या को हल मदद नहीं कर रहा हूँ। वैसे भी, मैं स्वीकार किए गए समाधान को संशोधित करने के लिए नहीं कह रहा हूं। मैं सिर्फ भविष्य के पाठकों के लिए अपने विचार साझा करना चाहता हूं। इस मामले में मैंने कुछ अनदेखा या गलत समझा, अगर मैं अपने विश्लेषण को गलत मानता हूं (और जो आपके समय को यह पढ़ने में बर्बाद करता है :-)।

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