2014-04-25 7 views
5

मैं एक वेबसाइट में एक पॉपअप संवाद के साथ संघर्ष कर रहा था, जिसे मैं स्वचालित कर रहा हूं, किसी कारण से यह संवाद में एक बटन पर क्लिक नहीं करेगा लेकिन बाकी सब कुछ ठीक से जुड़ा हुआ है। यह बिना किसी समस्या के बटन को पहचान रहा था और जब मैं इसे देख रहा था तो देख सकता था कि रंग बदलने के बाद बटन पर क्लिक करना प्रतीत होता था, इसलिए मैं थोड़ा फंस गया था।सेलेनियम वेबड्राइवर क्लिक बनाम action.click क्या अंतर है?

मेरे कोड मूल रूप से बहुत स्पष्ट देखा: -

WebElement targetElement = waitforElement(threadSesh); 
targetElement.click(); 

लेकिन जब मैंने उसे निम्नलिखित करने के लिए बदल सब बिलकुल ठीक काम करने के लिए लग रहा था!

WebElement targetElement = waitforElement(threadSesh); 
Actions action = new Actions(threadSesh.driver); 
action.click(targetElement); 
action.perform(); 

क्या कोई मुझे बता सकता है कि एक विधि काम क्यों नहीं करती है जबकि अन्य काम ठीक है? साथ ही, चाहे यह मदद करता है या नहीं, साइट ट्विटर बूटस्ट्रैप का उपयोग करके बनाई गई है, यदि इससे कोई फर्क पड़ता है लेकिन बटन स्वयं बहुत ही बुनियादी था।

<div class="modal hide fade in" style="width: 481px; margin-left: -241px; padding: 15px; display: block;" role="dialog" data-backdrop="static" data-keyboard="false" aria-hidden="false"> 
... 
<div class="modal-footer"> 
<a id="save-EditDetails" class="btn btn-small btn-info" type="button" style="margin-right: 7px; padding-left: 15px; padding-right: 15px;" data-bind="click: ok" href="#">Save</a> 
</div> 
</div> 

उत्तर

2

मैं अपने विशिष्ट मामले के बारे में निश्चित नहीं हूँ, लेकिन वहाँ WebElement क्लिक विधि और क्रिया विधि क्लिक के बीच कई मतभेद हैं। क्रियाएं 'क्लिक बहुत अधिक संख्या है, यह बहुत अधिक क्लिक ईवेंट को आपके द्वारा पास किए गए तत्व (स्थान) पर भेजता है। यह तत्व की परवाह नहीं करता है, यह केवल क्लिक करता है और आगे बढ़ता है जबकि कमजोर क्लिक एक अवरुद्ध कॉल है (हमेशा नहीं, संदर्भों की जांच करें) और इसमें पूर्व शर्त भी है जैसे क्लिक किए जाने वाले वेबलेमेंट को दिखाना चाहिए। साथ ही, वेब एलीमेंट्स 'क्लिक एक शून्य विधि है, क्रियाएं आपके द्वारा उपयोग की जा रही कार्रवाइयों के संदर्भ में रिटर्न पर क्लिक करती हैं। अधिक जानकारी के लिए here और here देखें।


संपादित करें। आपके द्वारा पोस्ट किए गए मार्कअप को देखते हुए, और यह पूरी तरह से गलत हो सकता है क्योंकि मैं बूटस्ट्रैप सीएसएस, modal hide fade in पर मालिक नहीं हूं और विशेष रूप से भाग संदिग्ध लगता है। क्या आप सुनिश्चित हैं कि जब आप webelement.click() भेजते हैं, तो आपका तत्व क्लिक करने योग्य स्थिति में है? क्या होता है? कुछ भी तो नहीं? फिर फिर, यदि क्रियाएं क्लिक पर भरोसेमंद काम कर रही हैं, तो इसके साथ क्यों न जाएं, मेरा मतलब है, अगर कुछ काम करता है, तो इसे ठीक क्यों करें?

+0

चीयर्स मैं उन लिंक को देखूंगा। क्लिक काम करने लगते हैं, बटन रंग में झिलमिलाहट करते हैं जैसे कि एक क्लिक एक्शन हुआ है लेकिन कुछ भी रजिस्टर्ड नहीं है (सेलेनियम भी सोचता है कि यह ठीक क्लिक करता है और अगले चरण पर चलता है, जो तब विफल रहता है) तो मुझे लगता है कि मैं कार्रवाई के साथ रह सकता हूं .click। धन्यवाद :) – MorkPork

+0

मुझे लगता है कि मैं WebElement.click() का उपयोग कर सकता हूं, लेकिन एंबेडेड एसवीजी पर क्रियाएँ नहीं। क्या Actions.dragAndDrop() के लिए एक वेब एलीमेंट एनालॉग है? या क्रियाएँ। कृपया()? – InfernalRapture

0

बस इसी तरह के परिदृश्य का परीक्षण। क्रियाओं से पहले WebElement साथ

actions.moveToElement(driver.findElement(By.xpath("//*[@id='relevantJobsAndCareerUpdates_1']"))).click().perform() 

और दूसरा एक क्लिक

driver.findElement(By.xpath("//*[@id='relevantJobsAndCareerUpdates_1']"))).click() 

दूसरा एक काम नहीं करता है पर क्लिक करें। यह त्रुटि संदेश देता है: रूट कारण: org.openqa.selenium.WebDriverException: अज्ञात त्रुटि: तत्व बिंदु पर क्लिक करने योग्य नहीं है (307, 24)। अन्य तत्व क्लिक प्राप्त होगा: ...

यह पिछले जैसा ही समस्या है। क्रियाओं का उपयोग इस समस्या को हल करें।

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