2011-10-08 13 views
12

मैं सेलेनियम वेबड्रिवर वाक्यविन्यास का उपयोग कर रहा हूं। मैं जानता हूँ कि, कि सेलेनियम सर्वर आधारित वाक्य रचना में, आप ऐसा करके एक जावास्क्रिप्ट ईवेंट को सक्रिय कर सकते हैं:सेलेनियम में जेएस घटना को कैसे फायर करें?

Selenium selenium = new DefaultSelenium("localhost", server.getPort(), 
      "*iexplore", "http://www.eviltester.com"); 
selenium.fireEvent("lteq30", "blur"); 

कैसे मैं एक आवेदन पत्र में एक ही, WebDriver (उदाहरण के लिए, FirefoxDriver) के साथ बनाया करते हो?

उत्तर

17
दुर्भाग्य

सेलेनियम WebDriver डिजाइनरों स्पष्ट decided not to include सेलेनियम में इस कार्यक्षमता 2.

यह एक विचार निर्णय यह आम तौर पर ठीक से व्यवहार नहीं चारों ओर संश्लेषित घटनाओं काम करने के लिए एक हैक है, क्योंकि WebDriver, में इस सुविधा को शामिल नहीं करने के लिए । हम देशी घटनाओं के लिए महान समर्थन प्रदान करके इस आवश्यकता को खत्म कर देंगे, इसलिए हम आगे बढ़ने में सुधार जारी रखेंगे। कोई उपयोगकर्ता कभी फोकस ईवेंट नहीं चलाएगा, वे फॉर्म नियंत्रण पर क्लिक करेंगे। यही आपके परीक्षणों को भी करना चाहिए।

इसके साथ ही कहा, आप किसी भी जावास्क्रिप्ट कोड आप चाहते हैं पर अमल कर सकते हैं। इस प्रकार आपको में जावास्क्रिप्ट के साथ ईवेंट कैसे फायर करना चाहिए। प्रेरणा के लिए this StackOverflow question पर नज़र डालें।

FirefoxDriver driver = new FirefoxDriver(); 
driver.ExecuteScript("[your fire event javascript code]"); 

मुझे यकीन है कि आप एक आवरण समारोह मूल रूप से fireEvent के रूप में एक ही बात को पूरा करने के बना सकते हैं कर रहा हूँ:

तो फिर तुम कुछ इस तरह कर सकते हैं।

+0

बस जे एस में क्लिक() घटना चल जाएगा काम करते हैं या मैं वास्तव में कोड में विशेष समारोह को चलाने के लिए की जरूरत है? यदि यह उत्तरार्द्ध है, तो यह परीक्षणों में शामिल होने के लिए बदसूरत निर्भरता की तरह लगता है। –

5

एक अन्य समाधान:

((JavascriptExecutor) driver).executeScript("return document.getElementById('element').blur()"); 
+1

आपके पास इसका रिटर्न स्टेटमेंट क्यों है? क्या यह वापसी के बिना काम नहीं करेगा? –

+1

कार्यक्षमता के लिए वापसी कथन की आवश्यकता नहीं है। लेकिन वापसी बयान के साथ, आपको प्रतिक्रिया भी मिलती है। –

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