2010-01-18 14 views
11

सेलेनियम परीक्षण मैं एक सेलेनियम क्लिक() मैन्युअल माउस क्लिक के रूप में कैसे काम कर सकता हूं?जीडब्ल्यूटी 2.0

मैंने हाल ही में जीडब्ल्यूटी को 1.7.1 से 2.0 तक अपग्रेड किया है। कुछ सेलेनियम परीक्षण (सेलेनियमआरसी v1.0.1, आईई 7) अब असफल हो रहे हैं। ऐसा लगता है कि सेलेनियम.क्लिक() विधि एक जीडब्ल्यूटी ट्रीइटम का चयन नहीं कर रही है। एक मैन्युअल क्लिक ट्रीइटम को नीला कर देगा (यानी चयनित दिखें और "डीओएमटी-ट्री इटैम-चयनित" डीओएम में क्लास एट्रिब्यूट है), लेकिन सेलेनियम परीक्षण नहीं करता है।

मुझे विश्वास है कि सेलेनियम वास्तव में सही तत्व ढूंढ रहा है, बस उस पर क्लिक नहीं कर रहा है। यदि आप क्लिक विधि में स्ट्रिंग पैरामीटर बदलते हैं तो आप यह जांच सकते हैं कि तत्व नहीं मिला है जब सेलेनियम एक अपवाद फेंकता है।

नीचे दिए गए नमूना कोड जीडब्ल्यूटी शोकेस वेबसाइट का उपयोग करता है। यह "बीथोवेन" शब्द पर क्लिक करने का प्रयास करता है। यदि आप अपने माउस के साथ उस शब्द पर क्लिक करते हैं, तो आप TreeItem नीले रंग को देखेंगे। हालांकि जब आप सेलेनियम परीक्षण चलाते हैं, तो यह नहीं होगा।

package test; 

import org.junit.Before; 
import org.junit.Test; 

import com.thoughtworks.selenium.DefaultSelenium; 
import com.thoughtworks.selenium.Selenium; 

public class TestTreeClick { 
    static Selenium selenium = null; 

    @Before 
    public void setUp() throws Exception { 
     if (selenium == null) { 
      selenium = new DefaultSelenium("localhost", 4444, "*iexplore", 
        "http://gwt.google.com/samples/Showcase/Showcase.html#CwTree"); 
      selenium.start(); 
     } 
    } 

    @Test 
    public void testingClicking() { 
     selenium.open("http://gwt.google.com/samples/Showcase/Showcase.html#CwTree"); 
     selenium.click("gwt-debug-cwTree-staticTree-root-child0-content"); 
    } 
} 

मैं कुछ अन्य तरीकों की कोशिश की है (Selenium.clickAt(), Selenium.fireEvent(), Selenium.mouseOver()/नीचे()/ऊपर()) - लेकिन कोई भी मैनुअल व्यवहार को पुनः।

+0

सेलेनियम समारोह है कि वास्तव में क्लिक घटनाओं आग triggerMouseEvent सेलेनियम कोर/src/मुख्य/संसाधन/कोर/scripts/सेलेनियम-browserbot.js में है देखें। अधिकांश कोड एक ईवेंट ऑब्जेक्ट बना रहा है, और फिर यह element.dispatchEvent (ईवेंट) को कॉल करता है। – John

उत्तर

6

दुर्भाग्यवश इस मामले पर एक नजर डालने से मैं सेलेनियम के साथ क्लिक करने में दोहराने में सक्षम नहीं हूं। मैंने कई लोगों को शिकायत की है कि वे जीडब्ल्यूटी के साथ सेलेनियम का उपयोग नहीं कर सकते हैं और अधिक प्रसिद्ध टीमों में से एक को यह मुद्दा है। Google वेव डेवलपमेंट टीम ने अपने कोड का परीक्षण करने के लिए वेबड्राइवर का उपयोग करना शुरू कर दिया है।

अब अच्छी बात वहाँ वर्तमान में सेलेनियम और WebDriver मर्ज करने के लिए है कि एक परियोजना के रूप में वे अपने शक्तियों और कमजोरियों हैं और उनमें से एक नंबर विभिन्न क्षेत्रों में हैं, इसलिए अंतिम उत्पाद अद्भुत होगा।

मेरा मानना ​​है कि उनके पास Google Code पर WebDriverBackedSelenium का एक वर्किंग वर्जन हो सकता है, इसलिए आपको केवल सेलेनियम के तत्कालता को अपडेट करना होगा और इसे अपना परीक्षण चलाने के लिए वेबड्राइवर कोड का उपयोग शुरू करना चाहिए।

+0

उस सुझाव के लिए धन्यवाद। मैंने WebDriverBackedSelenium का उपयोग करने का प्रयास किया लेकिन एक ही परिणाम मिला - सेलेनियम ने GWT TreeItems को ठीक से "चयन" नहीं किया था जिसे मैंने अपनी क्लिक() विधि का उपयोग करके क्लिक करने का प्रयास किया था। – Glennn

+0

हम्म जो वेबड्राइवर कमांड करने के बाद से डर लगता है लेकिन आप केवल सेलेनियम कोड लिखते हैं या यह है कि मैंने इसे कैसे समझा है – AutomatedTester

+1

आपकी टिप्पणी के बाद, मैंने फिर से जांच की और यह पता चला कि मैं WebDriverBackedSelenium का उपयोग नहीं कर रहा था। मैं सेलेनियम-2.0 ए का उपयोग कर रहा था।1 जार, लेकिन मुझे एहसास नहीं हुआ था कि मुझे नए डिफॉल्टसेलेनियम() के बजाय नए वेबड्राइवर बैकडेलिनियम() कन्स्ट्रक्टर का उपयोग करना पड़ा। नए कन्स्ट्रक्टर पैरामीटर और कॉलिंग के साथ .start() (जो एक त्रुटि फेंकता है) यह काम करता है। बहुत बहुत धन्यवाद। – Glennn

2

ऐसा लगता है कि वेबड्राइवर इसे ऐसा कर सकता है।

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.ie.InternetExplorerDriver; 

public class Example { 
public static void main(String[] args) throws InterruptedException { 
    WebDriver driver = new InternetExplorerDriver(); 
    driver.get("http://gwt.google.com/samples/Showcase/Showcase.html#CwTree"); 
    WebElement element = driver.findElement(By.id("gwt-debug-cwTree-staticTree-root-child0-content")); 
    element.click(); 
} 
} 

मैं अभी भी सेलेनियम के साथ ऐसा करने में सक्षम होना चाहता हूं। ऐसा हो सकता है कि भविष्य में सेलेनियम रिलीज वेबड्राइवर को पूरी तरह से शामिल करेगा, और सबकुछ फिर से अद्भुत होगा। लेकिन मुझे लगता है कि यह अभी काम करता है।

1

मैं उस कोड को पोस्ट करना चाहता था जो अंततः ऑटोमेटेडटेस्टर से उपयोगी टिप्पणियों के बाद मेरे लिए काम करता था।

import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebDriverBackedSelenium; 
import org.openqa.selenium.ie.InternetExplorerDriver; 

import com.thoughtworks.selenium.Selenium; 

public class TestTreeClick { 

    public static void main(String[] args) { 
     WebDriver driver = new InternetExplorerDriver(); 
     Selenium selenium = new WebDriverBackedSelenium(driver, "http://gwt.google.com/samples/Showcase/Showcase.html#CwTree"); 
     selenium.open("http://gwt.google.com/samples/Showcase/Showcase.html#CwTree"); 
     selenium.click("gwt-debug-cwTree-staticTree-root-child0-content"); 
    } 
} 
संबंधित मुद्दे