2015-04-08 7 views
11

पर क्लिक करने योग्य नहीं है I परीक्षण स्क्रिप्ट के लिए सेलेनियम का उपयोग कर रहा हूं। मुझे निम्न त्रुटि मिल रही है और यह त्रुटि यादृच्छिक रूप से होती है। जब मैं 10 बार दौड़ता हूं, तो मुझे यह दो बार मिलता है। तो यह वास्तव में पुनरुत्पादित नहीं है। क्या किसी को पता है कि ये क्यों हो रहा है? जिस तत्व को मैं क्लिक करने का प्रयास कर रहा हूं वह ब्राउज़र में निश्चित रूप से दिखाई देता है और आसपास नहीं चलता है इसलिए तत्व का आकार बदलने या खींचने की कोई आवश्यकता नहीं है। मैं क्रोम वेबड्राइवर का उपयोग कर रहा हूं और मैंने अन्य समस्या निवारण रणनीतियों को पढ़ा है (Debugging "Element is not clickable at point" error) और वे मेरे मुद्दे से प्रासंगिक नहीं लगते हैं। मैं भी पर्याप्त समय इंतजार कर रहा था।सेलेनियम - तत्व

UnknownError: unknown error: Element is not clickable at point (167, 403). Other element would receive the click: <div class="leftMasterBackground"></div> 
+0

क्या आप हमें इस बारे में कुछ जानकारी दे सकते हैं कि आप किस तत्व पर क्लिक करना चाहते हैं?यह भी दिलचस्प होगा कि कौन से तत्व इसके चारों ओर हैं और क्लिक से पहले क्या कार्य किया जाता है। –

+0

स्पष्ट प्रतीक्षा का उपयोग करें जब तक कि तत्व क्लिक करने के लिए दृश्यमान न हो। –

+0

क्या यह त्रुटि होती है जब पृष्ठ पर सभी स्क्रिप्ट और शैलियों को लोड करना समाप्त हो जाता है? – FDM

उत्तर

8

कई कदम आप स्थिरता में सुधार करने के लिए कर सकते हैं, जबकि विभिन्न UI तत्व पर क्लिक कर रहे हैं:

  • स्पष्ट रूप प्रतीक्षा के लिए यह डोम में उपस्थिति है
  • स्क्रॉल तत्व दृश्य में
  • जांचें कि क्लिक करने योग्य

क्या इससे स्थिरता में मदद मिली है? click() जो उन सभी स्थिरता कदम और fastClick() जो हो जाएगा होगा:

WebDriverWait wait = new WebDriverWait(driver, 3) 
JavascriptExecutor js = ((JavascriptExecutor) driver) 

//presence in DOM 
wait.until(ExpectedConditions.presenceOfElement(By.id("ID"))); 

//scrolling 
WebElement element = driver.findElement(By.id("ID"))); 
js.executeScript("arguments[0].scrollIntoView(true);", element); 

//clickable 
wait.until(ExpectedConditions.elementToBeClickable(By.id("ID"))); 

इसके अलावा, अगर आप अधिक अनुकूलित एक साथ डिफ़ॉल्ट Actions इंटरफ़ेस ओवरराइड करने के लिए तय करेगा, आपको क्लिक (उदाहरण के लिए) के दो प्रकार का उपयोग कर सकते हैं बिना किसी विविधता के डिफ़ॉल्ट क्लिक करें।

+0

मैंने केवल अपनी समस्या के साथ // स्क्रॉलिंग ब्लॉक का उपयोग किया और यह काम किया। धन्यवाद। संभवत: आपके प्रोटैक्टर परीक्षणों पर बार-बार कॉल करने के लिए यह एक फ़ंक्शन बनाने में एक और DRY समाधान है। मुझे यकीन है कि कई जगहें हैं जहां आपको क्लिक करने के लिए पृष्ठ पर किसी निश्चित स्थान पर स्क्रॉल करने की आवश्यकता है। हमारे समाधान में – JCC

+0

@ जेसीसी, उन मूल सेलेनियम पुस्तकालयों को अतिरिक्त अमूर्त स्तर में लपेटा गया। तो हमारे पास विधियां हैं: element.scrollToElement()। क्लिक करें(), element.waitUntilPresence()। क्लिक करें() और आदि – Stas

+1

शानदार काम! स्क्रॉल करने के लिए महत्वपूर्ण बात है! – Seva

2

मैं अपवाद को पकड़ने और इस तरह यह प्रबंधन के द्वारा हल कर लिया है: तत्व है जो आप क्लिक करना चाहते का

 WebDriver driver = new ChromeDriver(); 
     WebElement element = driver.findElement(By.id("ID")); 
     boolean clicked = false; 
     do{ 
      try { 
       element.click(); 
      } catch (WebDriverException e) { 
       continue; 
      } finally { 
       clicked = true; 
      } 
     } while (!clicked); 
+0

'ExpectedConditions.isClickable() ' – LeeGee

+1

पर एक नज़र डालें, मैंने पहले ही यह कार्यक्षमता देखी है, लेकिन यह क्रोमरेड्राइवर के साथ अच्छी तरह से काम नहीं करता है। क्या होता है: स्थिति 'सत्य' लौटाती है, लेकिन तत्व प्रभावी रूप से क्लिक करने योग्य नहीं है। – billi90

+0

मुझे यह त्रुटि थी, जो मुझे इस पृष्ठ पर लाया। क्या आपका तत्व दूसरे (पारदर्शी) तत्व से ढका हुआ है? क्या यह एनिमेटेड है? तत्व पर क्लिक करने के लिए 'executeScript' (या अपने बाध्यकारी समकक्ष) के साथ जेएस इंजेक्ट करना संभव है? – LeeGee

1

क्लिक पेरेंट तत्व। यह केवल वर्कअराउंड समाधान हो सकता है।

2

मुझे क्रोम के साथ भी एक ही समस्या का सामना करना पड़ रहा था। मैं समाधान कर लिया है उस तत्व पर क्लिक करने से पहले कोड की एक पंक्ति डाल:

scrollToViewElement(driver,xpath); 
0
  • यह केवल क्रोम पर होता है तो यह IE और Firefox पर काम करता है
  • ChromeDriver हमेशा तत्व के बीच क्लिक करता है
  • कारण क्रोम ड्राइवर लिंक के सही स्क्रीन स्थान की गणना नहीं करता है।

समाधान:

// एक तत्व का पता लगाएं और बताएं कि वह

WebElement elementToClick = driver.findElement(By.xpath("some xpath")); // Scroll the browser to the element's Y position ((JavascriptExecutor) driver).executeScript("window.scrollTo(0,"+elementToClick.getLocation().y+")"); // Click the element elementToClick.click();

0

मैं कारण स्पिनर का एक तत्व छिपा था जो ऐसी ही समस्या मिला है।

मैंने xpath दिया और इस मुद्दे को हल किया। अन्य लोगों ने सुझाव दिया 1. स्क्रॉल 2. नींद भी उनके लिए काम किया।

+0

आप प्रतीक्षा स्थिति का उपयोग कर निम्न त्रुटि को भी हल कर सकते हैं: waitUntilTrueOrTimeout (ExpectedConditions.invisibilityOfElementLocated (elementHidingOtherElement)); संरक्षित वी waitUntilTrueOrTimeout (अंतिम अपेक्षित कंडिशन isTrue) { वापसी प्रतीक्षा करें UntilTrueOrTimeout (isTrue, waitTimeOutSeconds); } संरक्षित वी waitUntilTrueOrTimeout (अंतिम ExpectedCondition isTrue, अंतिम पूर्णांक waitTimeSeconds) { नई WebDriverWait (this.driver, waitTimeSeconds) लौट .ignoring (StaleElementReferenceException.class) .until (isTrue); – dimyo

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