2012-01-03 15 views
7
सेलेनियम

(मैं, इतने पर कई अन्य इसी तरह के पदों पर देखा है और दुर्भाग्य से नहीं इस समस्या को हल करने में सक्षम है तो यहां आता है ...)सेलेनियम WebDriver क्लिक करें() IE9

मैं उपयोग कर रहा हूँ के साथ विफल एक साधारण सरल वेबपृष्ठ ड्राइव करने के लिए वेबड्राइवर (सी # कार्यान्वयन, संस्करण 2.15)। पृष्ठ में फॉर्म सबमिट करने के लिए उपयोगकर्ता नाम और पासवर्ड के लिए दो < इनपुट> के साथ एक फॉर्म है और एक < इनपुट> है। मैं उपयोगकर्ता नाम और पासवर्ड के लिए सफलतापूर्वक मूल्य दर्ज कर सकता हूं, लेकिन सबमिट बटन पर क्लिक() कॉल का कोई असर नहीं पड़ता है। तत्व पर

  • विंडो फ़ोकस बदलें currentWindowHandle के तत्व के पेरेंट पर
  • क्लिक करें, तो
  • एक जोड़ें:

    अन्य सिफारिशों के अनुसार, मैं निम्नलिखित चाल, जिनमें से कोई भी काम किया है की कोशिश की है लंबे निहित इंतजार

  • एक लंबे स्पष्ट इंतजार
  • (20 सेकंड सो द्वारा) जोड़ें तत्व पर समय की एक पूरी गुच्छा क्लिक करें
  • उपयोग क्लिक करें()
  • कुंजी तत्व के लिए (यह एक त्रुटि के रूप में सेलेनियम रिपोर्ट) भेजें "\ n"

ध्यान दें कि मैं सत्यापित किया है < इनपुट> बटन है कि के बजाय जमा करें() वास्तव में सफलतापूर्वक पाया, ताकि यह एक समस्या प्रतीत नहीं होता है।

साथ ही, ध्यान दें कि मैंने सत्यापित किया है कि बटन वास्तव में सेलेनियम-भूमि के बाहर काम करता है। यही है, मैं साइट पर ब्राउज़ कर सकता हूं, लॉगिन प्रमाण-पत्र दर्ज कर सकता हूं, और सबमिट बटन पर क्लिक कर सकता हूं (और यह काम करता है!)।

इसके अलावा, ध्यान दें कि यह समस्या आईई पर है। यह क्रोम और एफएफ 7 के साथ मेरे लिए नहीं होता है।

तो क्या कहा, क्या किसी के पास कोई अन्य विचार है?

उत्तर

5

क्या आपकी साइट सार्वजनिक रूप से परीक्षण के लिए उपलब्ध है? क्या आपका IE zoom level 100% पर है? यह एक आवश्यकता देशी क्लिक ईवेंट प्रलेखन here

ब्राउज़र ज़ूम स्तर 100% पर सेट किया जाना चाहिए ताकि देशी माउस घटनाओं सही निर्देशांक सेट किया जा सकता से काम करने के लिए है।

यदि यह काम नहीं करता है तो यह वेबड्राइवर में एक बग लगता है। आपको here कोई समस्या खोलनी चाहिए।

यह कहकर, आप संभवतः एक अस्थायी समाधान के रूप में जावा स्क्रिप्ट मार्ग पर जा सकते हैं। कुछ,

driver.navigate().to("javascript:document.getElementById('yoursubmitbutton').click()"); 
+0

मैं आईई ज़ूम स्तर कैसे सेट कर सकता हूं? –

+0

हाँ, यह वास्तव में ज़ूम स्तर है। धन्यवाद! हालांकि मुझे ज़ूम स्तर को प्रोग्रामेटिक रूप से पहचानने और/या सेट करने के लिए वास्तव में एक तरीका चाहिए। मैं इस समय के लिए अपने परीक्षण विफल नहीं कर सकता ... –

2

ऐसा लगता है कि यह के साथ समस्या हो सकती है जहां माउस क्लिक होता है। मैंने सेलेनियम में क्रिया तंत्र का उपयोग करने की कोशिश की ताकि माउस ऑफ-ऑफ को ऑफसेट के साथ थोड़ा-सा बल दिया जा सके। यह तत्व पर सफलतापूर्वक क्लिक करें:

new Actions(GuiOps.driver).MoveToElement(e).MoveByOffset(5,5).ClickAndHold().Release().Perform(); 
1

मुझे यह समस्या थी।मैं पोस्ट जहाँ मैं समस्या का हल मिल याद नहीं कर सकते, लेकिन मैंने पाया कि मेरे लिए काम किया है:

एक बटन पर:

var navButton = driver.FindElement(By.Id("NavButton")); 
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].fireEvent('onclick');", navButton); 

हर बार काम करता है।

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

अंत में काम करने वाली एकमात्र चीज उस पंक्ति के भीतर छवि का चयन करना था और उस पर क्लिक भेजना था।

var img = driver.FindElement(By.Id("fim{4C3DE9FA-45B0-40E0-BD95-9EE0374EA38A}")); 
((IJavaScriptExecutor)driver).ExecuteScript("arguments[0].fireEvent('onclick');", img); 

आशा है कि मदद करता है।

-1

एक और संभावित समाधान, जैसे क्लिक करने दोहरा तरह कर सकते हैं:

Btn.click(); 
Btn.click(); 

क्योंकि 1 क्लिक सिर्फ फोकस और 2 एक सेट वास्तविक क्लिक करता है। यह मेरे लिए काम किया।

+2

इस मुद्दे के साथ यदि आप एकाधिक ब्राउज़रों के साथ परीक्षण करते हैं, तो पहला क्लिक एक क्रिया करने जा रहा है, फिर दूसरा क्लिक अपवाद फेंकने जा रहा है क्योंकि यह तत्व नहीं ढूंढ सकता है। – boolean

1

मुझे यहां कई समाधान दिखाई देते हैं, लेकिन मैंने सोचा कि मैं साझा करता हूं कि मेरे लिए क्या काम करेगा अगर किसी और को अलग दृष्टिकोण की आवश्यकता हो। मैं एक अलग तरीके

का उपयोग कर उदाहरण

btn.Sendkeys(Keys.Enter); 
0

उपयोग FindElement(By.CSSSelector("'CSSPath'")) के लिए एक ऐसी ही समस्या, समाधान मेरे लिए क्लिक के रूप में सरल था; यदि आपके पास बटन पर लागू कोई सीएसएस है, तो वैकल्पिक रूप से आईडी, टैग या WebDriverWait विधि

0

के साथ तत्व को खोजने के लिए वैकल्पिक रूप से अन्य एकाधिक कथन लिखें, आपको मूल घटनाओं को सक्षम करने की आवश्यकता हो सकती है "सत्य" जब आप इसे IE पर चला रहे हैं और यदि आप एक ही कोड को एफएफ और क्रोम में चलाने के लिए चाहते हैं, तो आपको उन ब्राउज़रों में भी मूल घटनाओं को "सत्य" में सक्षम करने की आवश्यकता है।

आप ऐसा कर सकते हैं जब आप उस ब्राउज़र को सेट कर रहे हों जिस पर आप दौड़ना चाहते हैं।

0

कोशिश कोड -

driver.FindElement(By.Id("btn")).sendkeys("\n"); 
0

इस कोशिश ..
WebElement hiddenWebElement = d.findElement (By.xpath (xpath));
((जावास्क्रिप्ट एक्सटेक्टर) डी) .executeScript ("तर्क [0] .click()", छुपा वेबबेलमेंट);

0

निम्नलिखित मेरे लिए काम किया:

@FindBy(id = "submit_action") 
WebElement submitButton_; 
... 
public void clickSubmit() { 

    if (driver_ instanceof InternetExplorerDriver) { 
     ((JavascriptExecutor) driver_).executeScript("arguments[0].fireEvent('onclick');", submitButton_); 
    } 
    else { 
     submitButton_.click(); 
    } 
} 

fireEvent के रूप में केवल इसलिए विकल्प आईई द्वारा समर्थित है।

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