2010-04-17 11 views

उत्तर

2

मैं काम करने के लिए :focus pseudoclass विचार, यकीन नहीं क्यों नहीं मिल सका - लक्ष्यीकरण css=#search_input input.text का मिलान नहीं हुआ है, लेकिन css=#search_input input.text:focus नहीं किया? लेकिन यहाँ क्या मेरे लिए काम किया है:

self.assertEquals(self.se.get_element_index('dom=document.activeElement'), 
    self.se.get_element_index('//input[@id="search-query"]')) 

यह Python Selenium API उपयोग कर रहा है, इसलिए get_element_index() कॉल कोर सेलेनियम आदेश सूची के आसपास रैपर हैं। इसे अपने पर्यावरण में अनुकूलित करें। यह दस्तावेज़ के केंद्रित तत्व के तत्व सूचकांक (एक जावास्क्रिप्ट डोम लोकेटर के साथ मिल गया) और तत्व आप ध्यान देने के लिए परीक्षण करना चाहते हैं के तत्व सूचकांक का मूल्यांकन कर रहा है (एक XPath लोकेटर के साथ मिल गया।) यह भी this question देखते हैं।

+0

दुर्भाग्य से get_element_index केवल तत्व के सूचकांक को अपने माता-पिता के भीतर प्राप्त करता है। तो यदि आपके पास दो divs ए और बी हैं, जिनमें से प्रत्येक में एकमात्र बच्चा के रूप में टेक्स्टफील्ड होता है, तो यदि ए का टेक्स्टबॉक्स चुना जाता है, तो आपके उदाहरण कोड में get_element_index कॉल दोनों 0 लौटाएंगे, इसलिए आपको झूठा मिलेगा सकारात्मक। –

1

आप जब सेलेनियम के लिए एक तत्व लोकेटर प्रदान CSS चयनकर्ताओं का उपयोग कर सकते हैं: http://release.seleniumhq.org/selenium-core/1.0/reference.html#locators

इसलिए, आप केवल मैच के लिए करता है, तो तत्व केंद्रित है अपने चयनकर्ता पर :focus सीएसएस छद्म वर्ग का उपयोग कर सकते हैं।

संयोजन करें कि verifyElementPresent कार्रवाई और निम्न के जैसा कुछ लक्ष्य: css=.yourclassname:focus। निश्चित रूप से अपने CSS वर्ग नाम के साथ yourclassname बदलें, या अन्य CSS चयनकर्ताओं में से एक का उपयोग करें; अंत में :focus महत्वपूर्ण बात है।

ध्यान दें कि यह लगभग निश्चित रूप से सेलेनियम आईडीई फ़ायरफ़ॉक्स प्लगइन में काम नहीं करेगा। मुझे कल्पना है कि ऐसा इसलिए है क्योंकि इस प्लगइन के बजाय फोकस होगा। मैं इसे आईडीई (परीक्षण हमेशा विफल) में काम नहीं कर सकता है, लेकिन यह ठीक काम किया है एक बार मैं इसे निर्यात किया और एक जावा परीक्षण के रूप में भाग गया।

HTH

सैम

+0

मैं इसे काम के रूप में उत्तर के रूप में चिह्नित कर रहा हूं लेकिन मैं वास्तव में इसे मेरे लिए काम नहीं कर सका। मैं सेलेनियम आरसी का उपयोग कर रहा हूं, मैं देख सकता हूं कि तत्व केंद्रित है (क्योंकि मैंने अपने सीएसएस में एक * फोकस {पृष्ठभूमि: गुलाबी} जोड़ा है), लेकिन यह है कि एलिमेंटपेजेंट हमेशा झूठी वापसी करता है। – hwiechers

1

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

यदि आप निम्नलिखित स्क्रिप्ट https://gist.github.com/1166821 शामिल करते हैं, इससे पहले कि आप JQuery शामिल करते हैं, तो आपके सेलेनियम परीक्षण पास होंगे: फोकस परीक्षण।

मुद्दा, समाधान और कैसे की एक पूरी ऊपर लिखने परीक्षण चलाने के लिए के लिए, की समीक्षा http://blog.mattheworiordan.com/post/9308775285/testing-focus-with-jquery-and-selenium-or

आशा है कि दूसरों को, जो इस एक ही मुद्दा है में मदद करता है कृपया। अन्य उत्तर की

6

कोई भी मेरे लिए काम किया, विभिन्न कारणों के लिए जब मैं एक ही मुद्दा था। मैं निम्नलिखित कर रहा था (जावा में सेलेनियम 2.0 वेबड्राइवर के साथ)।

WebDriver driver = new FirefoxDriver(); 
String elScript = "return document.activeElement;"; 

// Note that the executeScript call returns a WebElement, 
// so you can do quite a lot with the result. 
WebElement focuseedEl = (WebElement) ((JavascriptExecutor) driver).executeScript(elScript); 

टिप्पणी भ्रम मैं था के एक बिंदु को स्पष्ट करते हैं: executeScript क्या आप यह कहना निष्पादित करने के लिए के आधार पर अलग अलग बातें है, जो काफी मुश्किल हो सकता है देता है।

+0

+1 - बहुत अच्छा काम किया! – JOpuckman

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

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