2011-06-15 17 views
10

में सेलेनियम 2 में कोई तत्व मौजूद नहीं है, मैं यह सुनिश्चित करना चाहता हूं कि ड्राइवर द्वारा लोड किए गए पृष्ठ पर कोई तत्व मौजूद नहीं है। मैं यहां अपने बेवकूफ कार्यान्वयन सहित हूँ।मैं कैसे सत्यापित करूं कि सेलेनियम 2

WebElement deleteLink = null; 
    try { 
     deleteLink = driver.findElement(By.className("commentEdit")); 
    } catch (NoSuchElementException e) { 

    } 
    assertTrue(deleteLink != null); 

वहाँ एक और अधिक सुरुचिपूर्ण तरीका है कि मूल रूप से कहने देगी कि NoSuchElementException फेंक दिया गया था की पुष्टि करता है?

उत्तर

26

आप JUnit का उपयोग कर परीक्षण कर रहे हैं और कहा कि केवल एक चीज आप आप परीक्षण

@Test (expected=NoSuchElementException.class) 
public void someTest() { 
    driver.findElement(By.className("commentEdit")); 
} 

का उपयोग करके अपवाद की उम्मीद कर सकता है या फिर आप findElements विधि है कि तत्वों या एक का एक सूची रिटर्न इस्तेमाल कर सकते हैं परीक्षण कर रहे हैं, तो खाली सूची है, तो कोई भी पाए जाते हैं (NoSuchElementException फेंक नहीं है):

... 
List<WebElement> deleteLinks = driver.findElements(By.className("commentEdit")); 
assertTrue(deleteLinks.isEmpty()); 
... 

या

.... 
assertTrue(driver.findElements(By.className("commentEdit")).isEmpty()); 
.... 
+0

बिल्कुल सही, बिल्कुल जो मैं ढूंढ रहा था! बहुत बहुत धन्यवाद! – Han

+0

अच्छा समाधान। हालांकि, इसमें ImplicitWait के साथ समस्याएं हैं, क्योंकि कॉल करने के लिए कॉल तत्वों को स्पष्ट रूप से दिखाने के लिए प्रतीक्षा करते हैं। – tishma

+1

आप प्रतीक्षा समय को 1 सेकंड या जो भी समय चाहें सेट करके सेट कर सकते हैं। मैंने इसे डिफ़ॉल्ट के रूप में सेट किया है ताकि मेरे समाधान में, मैंने .exists() विधि जोड़ने के लिए .net एक्सटेंशन विधि बनाई है। ।। Driver.Manage() टाइमआउट() ImplicitlyWait (TimeSpan.FromSeconds (1)); –

2

मैं पेज कक्षाओं को विभाजित करता हूं इसलिए मुझे तत्वों को एक से अधिक बार परिभाषित करने की आवश्यकता नहीं है। मेरे नूनिट और एमब्यूनिट टेस्ट क्लासेस उन पेज क्लासेस को कॉल करते हैं। मैंने अभी तक यह कोशिश नहीं की है, लेकिन इस तरह मैं इसे करने के बारे में सोच रहा हूं इसलिए मैं .exists() का उपयोग कर सकता हूं जैसे मैंने वैटीएन के साथ किया था।

एक्सटेंशन कक्षा:

public static class ExtensionMethods 
{ 
    public static IWebElement ElementById(this IWebDriver driver, string id) 
    { 
     IWebElement e = null; 
     try 
     { 
     e = driver.FindElement(By.Id(id)); 
     } 
     catch (NoSuchElement){} 
     return e; 
    } 
    public static bool Exists(this IWebElement e) 
    { 
     if (e == null) 
     return false; 
     return true; 
    } 
} 

पृष्ठ कक्षा:

public IWebElement SaveButton { get { try { return driver.ElementById("ctl00_m_m_body_body_cp2_btnSave")); } } 

टेस्ट वर्ग:

MyPageClass myPageClass = new MyPageClass(driver); 
if (myPageClass.SaveButton.Exists()) 
{ 
    Console.WriteLine("element doesn't exist"); 
} 
+0

चालक। प्रबंधन()। टाइमआउट()। ImplicitlyWait (TimeSpan.FromSeconds (1)); –

-3

उपयोग assertF वरना :)

assertFalse(isElementPresent(By.className("commentEdit"))); 
+0

ऐसी कोई विधि मौजूद नहीं है! – SiKing

4

आप इस का उपयोग कर सकते हैं:

Boolean exist = driver.findElements(By.whatever(whatever)).size() == 0; 

यह सच वापस आ जाएगी मौजूद नहीं है।

1

आप driver.findElements ("आपके तत्व") का उपयोग करके तत्वों की एक सूची पुनर्प्राप्त कर सकते हैं और फिर तत्व की खोज कर सकते हैं। यदि सूची में तत्व शामिल नहीं है तो आपको अपना वांछित व्यवहार मिल गया है :)

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