2014-11-15 7 views
6

में तत्व क्लिक करने योग्य है या नहीं, मैं यह सत्यापित करने में सक्षम हूं कि कोई तत्व मौजूद है या नहीं या नहीं, लेकिन यह देखने के लिए कोई तरीका नहीं दिख रहा है कि यह 'क्लिक करने योग्य' है (बात नहीं कर रहा है अक्षम के बारे में)।जांचें कि सेलेनियम

समस्या यह है कि अक्सर वेबफॉर्म भरते समय, तत्व जो मैं चाहता हूं उसे लोड के दौरान एक div के साथ ओवरले किया जा सकता है। Div को पहचानना मुश्किल है क्योंकि यह आईडी है, नाम और यहां तक ​​कि सीएसएस लचीला है। इसलिए मैं यह पता लगाने की कोशिश कर रहा हूं कि एक इनपुट फ़ील्ड 'क्लिक' या 'भरे' हो सकता है या नहीं। जब ओवरलेइंग div मौजूद होता है, तो फ़ील्ड नियमित उपयोगकर्ता द्वारा भरा नहीं जा सकता है (क्योंकि div इनपुट फ़ील्ड ओवरले करेगा और उपयोगकर्ता को इसे भरने की अनुमति नहीं देगा) लेकिन इसे सेलेनियम द्वारा भरा जा सकता है। मैं इसे रोकना चाहता हूं और उपयोगकर्ता इसे भरने के बाद सेलेनियम को भरने की अनुमति देता हूं।

उत्तर

8

आप कर सकते हैं wait for the element to be clickable:

from selenium import webdriver 
from selenium.webdriver.common.by import By 
from selenium.webdriver.support.ui import WebDriverWait 
from selenium.webdriver.support import expected_conditions as EC 

driver = webdriver.Firefox() 
driver.get("http://somedomain") 

element = WebDriverWait(driver, 10).until(
    EC.element_to_be_clickable((By.ID, "myDynamicElement")) 
) 

या, आप EAFP principle का पालन करें और पकड़ने के लिए एक अपवाद click() द्वारा उठाया जा रहा कर सकते हैं:

from selenium.common.exceptions import WebDriverException 

try: 
    element.click() 
except WebDriverException: 
    print "Element is not clickable" 
+1

ऐसा नहीं है कि लगता है ऊपर काम का न। सफेद ओवरले अभी भी मौजूद है, element_to_be_clickable प्रतीक्षा अभी भी इसे अनुमति देगा। जब मैं अनुपयोगी तत्व पर क्लिक करने का प्रयास करता हूं तो कोई अपवाद नहीं फेंक दिया जाता है। –

+1

क्या आप निम्नलिखित जानकारी साझा कर सकते हैं: 1)। प्रासंगिक एचटीएमएल स्रोत कोड 2)। सेलेनियम बाध्यकारी संस्करण 3) .रोवर नाम और संस्करण –

+0

@AayushAgrawal अच्छी तरह से, तब तक अपनी समस्या के बारे में और अधिक कहना आसान नहीं है जब तक कि आप हमें आज़माएं यह खुद कृपया उस कोड को प्रदान करें जिसमें आपके पास वर्तमान में लक्षित लक्ष्य साइट शामिल है (यदि संभव हो)। – alecxe

1

आप प्रदर्शन से पहले webElement.isEnabled() और webElement.isDisplayed() तरीकों का उपयोग कर सकते हैं इनपुट क्षेत्र पर कोई भी ऑपरेशन ...

मुझे आशा है कि इससे आपको समस्या हल हो जाएगी ...

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

0

एक (सेलेनियम के लिए) नहीं पहुंचा जा सकता तत्व मैं alwas का उपयोग क्लिक करने के लिए:

public void clickElement(WebElement el) throws InterruptedException { 
    ((JavascriptExecutor) driver).executeScript("arguments[0].click();", el); 
} 
संबंधित मुद्दे