2011-01-11 13 views
5

पर तत्वों के साथ बातचीत करने के लिए सेलेनियम 2 के IWebDriver का उपयोग करके मैं सी # में यूनिट टेस्ट लिखने के लिए सेलेनियम के IWebDriver का उपयोग कर रहा हूं।पृष्ठ

IWebDriver defaultDriver = new InternetExplorerDriver(); 
var ddl = driver.FindElements(By.TagName("select")); 

अंतिम पंक्ति IWebElement में लिपटे select HTML तत्व को पुन: प्राप्त:

इस तरह के एक उदाहरण है।

मैं एक तरीका है कि select सूची में एक विशिष्ट option को चयन अनुकरण करने की जरूरत है लेकिन मैं यह कैसे करना है पता नहीं कर सकते हैं।


कुछ research पर, मैंने जहां लोगों को पूरा करने के लिए निम्नलिखित ISelenium DefaultSelenium वर्ग का उपयोग कर रहे उदाहरण पाया है, लेकिन क्योंकि मैं IWebDriver और INavigation (defaultDriver.Navigate() से) के साथ सब कुछ कर रहा हूँ मैं इस वर्ग का इस्तेमाल कर रही नहीं कर रहा हूँ।

मैंने यह भी देखा कि ISelenium DefaultSelenium में अन्य विधियों का एक टन शामिल है जो IWebDriver के ठोस कार्यान्वयन में उपलब्ध नहीं हैं।

तो क्या के साथ IWebDriver और INavigation का उपयोग करने का कोई तरीका है?

उत्तर

7

जैसा कि ज़ोलीएडुन का उल्लेख है, OpenQA.Selenium.Support.UI नामस्थान में एक सुंदर नई चयन कक्षा है। चयन तत्व और उसके विकल्पों तक पहुंचने का यह सबसे अच्छा तरीका है क्योंकि यह एपीआई इतना आसान है। मान लीजिए कि आप एक वेब पेज है कि इस

<!DOCTYPE html> 
<head> 
<title>Disposable Page</title> 
</head> 
    <body > 
     <select id="select"> 
      <option value="volvo">Volvo</option> 
      <option value="saab">Saab</option> 
      <option value="mercedes">Mercedes</option> 
      <option value="audi">Audi</option> 
     </select> 
    </body> 
</html> 

आप का चयन इस प्रकार दिखाई देगा तक पहुँचने के लिए कोड कर रहे हैं की तरह कुछ लग रहा है मिल गया है करते हैं। ध्यान दें कि मैं अपने कन्स्ट्रक्टर को सामान्य IWebElement को पास करके ऑब्जेक्ट का चयन कैसे करता हूं। आपके पास ऑब्जेक्ट पर ऑब्जेक्ट पर बहुत सी विधियां हैं। अधिक जानकारी के लिए Take a look at the source, जब तक यह ठीक से प्रलेखित नहीं हो जाता है।

using OpenQA.Selenium.Support.UI; 
using OpenQA.Selenium; 
using System.Collections.Generic; 
using OpenQA.Selenium.IE; 

namespace Selenium2 
{ 
    class SelectExample 
    { 
     public static void Main(string[] args) 
     { 
      IWebDriver driver = new InternetExplorerDriver(); 
      driver.Navigate().GoToUrl("www.example.com"); 

      //note how here's i'm passing in a normal IWebElement to the Select 
      // constructor 
      Select select = new Select(driver.FindElement(By.Id("select"))); 
      IList<IWebElement> options = select.GetOptions(); 
      foreach (IWebElement option in options) 
      { 
       System.Console.WriteLine(option.Text); 
      } 
      select.SelectByValue("audi"); 

      //This is only here so you have time to read the output and 
      System.Console.ReadLine(); 
      driver.Quit(); 

     } 
    } 
} 

हालांकि समर्थन वर्ग के बारे में कुछ बातें ध्यान दें। यहां तक ​​कि अगर आपने नवीनतम बीटा डाउनलोड किया है, तो समर्थन डीएलएल वहां नहीं होगा। समर्थन पैकेज में जावा पुस्तकालयों में अपेक्षाकृत लंबा इतिहास है (यही वह जगह है जहां पेज ऑब्जेक्ट रहता है) लेकिन यह अभी भी नेट ड्राइवर में बहुत ताजा है। सौभाग्य से, स्रोत से निर्माण करना वास्तव में आसान है। I pulled from SVN ने बीटा डाउनलोड से WebDriver.Common.dll का संदर्भ दिया और सी # एक्सप्रेस 2008 में बनाया गया। इस वर्ग को अन्य कुछ वर्गों के रूप में भी परीक्षण नहीं किया गया है, लेकिन मेरा उदाहरण इंटरनेट एक्सप्लोरर और फ़ायरफ़ॉक्स में काम करता है।

कुछ अन्य चीजें हैं जिन्हें मुझे ऊपर दिए गए कोड के आधार पर इंगित करना चाहिए।सबसे पहले लाइन आप कुछ चुनिंदा तत्व

driver.FindElements(By.TagName("select")); 

सभी चयन तत्वों को खोजने के लिए जा रहा है पता लगाने के लिए इस्तेमाल कर रहे थे। आपको शायद '12 'के बिना driver.FindElement का उपयोग करना चाहिए।

इसके अलावा, आप शायद ही कभी इनविगेशन का उपयोग करेंगे। आप की तरह driver.Navigate().GoToUrl("http://example.com");

अन्त में अपने नेविगेशन के सबसे करेंगे, DefaultSelenium बड़े सेलेनियम 1.x API को एक्सेस करने का तरीका है। सेलेनियम 2 सेलेनियम 1 से एक बहुत ही महत्वपूर्ण प्रस्थान है, इसलिए जब तक आप पुराने सेलेनियम 2 एपीआई (जिसे अक्सर वेबड्राइवर एपीआई के रूप में जाना जाता है) में पुराने परीक्षणों को माइग्रेट करने का प्रयास नहीं कर रहे हैं, तो आप डिफॉल्टसेलेनियम का उपयोग नहीं करेंगे।

+0

+1 'चयन करें' वर्ग, जैसा कि ज़ोलीएडुन द्वारा लिंक किया गया था, लेकिन मैं इस उत्तर को स्वीकार कर रहा हूं क्योंकि आपने अधिक जानकारी प्रदान की है। चूंकि 'चयन' अभी तक सार्वजनिक डीएल में उपलब्ध नहीं है, इसलिए मैं वर्तमान में कक्षा और ज़्लोएडुन द्वारा अपवाद का उपयोग कर रहा हूं। 'FindElements' के संबंध में, मुझे इसका उपयोग करने की आवश्यकता है क्योंकि 1 से अधिक 'चयन' है जिसे मैं पुनर्प्राप्त करना चाहता हूं। अंत में, 'डिफॉल्टसेलेनियम' के संबंध में इस मुद्दे का उल्लेख करने के लिए धन्यवाद, हालांकि मेरे पास इसका पालन करने का सवाल है; क्या 'डिफॉल्टसेलेनियम' ऑफ़र के कई तरीकों का उपयोग करने का कोई तरीका है? IxebDriver को 2.x के साथ जाने का तरीका होने के लिए –

+0

+1। बस शुरू करना और अधिकांश डेमो जिन्हें मैं डिफॉल्टसेलेनियम का उपयोग कर सकता हूं। –

2

आपको से ddl.FindElements(By.TagName("option")); का उपयोग करके सभी option तत्व प्राप्त करना चाहिए। तो फिर तुम लौट आए संग्रह के माध्यम से पुनरावृति और की IWebElement

अद्यतनSetSelected विधि का उपयोग कर आवश्यक वस्तु (ओं) का चयन कर सकते हैं: ऐसा लगता है वहाँ अब WebDriver में Select की एक सी # कार्यान्वयन है कि - पहले यह जावा में था ही । कृपया code पर एक नज़र डालें और इस वर्ग का उपयोग करना आसान है

+0

'IWebElement' में' SetSelected' विधि नहीं है। 'चयन' नामक एक विधि है लेकिन मेरे मामले में, यह कुछ भी नहीं कर रहा है। –

+0

मैं सी # का उपयोग नहीं कर रहा हूं, इसलिए मैं विधि नामों को याद कर सकता हूं - इसके लिए खेद है। क्या आपने OpenQA.Selenium.Support.UI का चयन करने का प्रयास किया है। वर्ग का चयन करें? क्या आप चयन के विकल्प पर चयन() का उपयोग कर रहे हैं? –