सेलेनियम वेबड्राइवर सी # का उपयोग करके ड्रॉप डाउन से एक विकल्प का चयन कैसे करें?


87

मैं अपने वेब परीक्षण के लिए एक विकल्प का चयन करने की कोशिश कर रहा था। एक उदाहरण यहां पाया जा सकता है: http://www.tizag.com/phpT/examples/formex.php

ऑप्शन पार्ट को चुनने के अलावा सब कुछ बढ़िया काम करता है। मूल्य या लेबल द्वारा किसी विकल्प का चयन कैसे करें?

मेरा कोड:

using OpenQA.Selenium.Firefox;
using OpenQA.Selenium;
using System.Collections.ObjectModel;
using System.Text.RegularExpressions;
using System.Threading;
using System.Diagnostics;
using System.Runtime.InteropServices;

class GoogleSuggest
{
    static void Main()
    {
        IWebDriver driver = new FirefoxDriver();

        //Notice navigation is slightly different than the Java version
        //This is because 'get' is a keyword in C#
        driver.Navigate().GoToUrl("http://www.tizag.com/phpT/examples/formex.php");
        IWebElement query = driver.FindElement(By.Name("Fname"));
        query.SendKeys("John");
        driver.FindElement(By.Name("Lname")).SendKeys("Doe");
        driver.FindElement(By.XPath("//input[@name='gender' and @value='Male']")).Click();
        driver.FindElement(By.XPath("//input[@name='food[]' and @value='Chicken']")).Click();
        driver.FindElement(By.Name("quote")).Clear();
        driver.FindElement(By.Name("quote")).SendKeys("Be Present!");
        driver.FindElement(By.Name("education")).SendKeys(Keys.Down + Keys.Enter); // working but that's not what i was looking for
        // driver.FindElement(By.XPath("//option[@value='HighSchool']")).Click(); not working
        //  driver.FindElement(By.XPath("/html/body/table[2]/tbody/tr/td[2]/table/tbody/tr/td/div[5]/form/select/option[2]")).Click(); not working
        // driver.FindElement(By.XPath("id('examp')/x:form/x:select[1]/x:option[2]")).Click(); not working

        }
}

जवाबों:


185

आपको ड्रॉप डाउन सूची से एक चयनित तत्व ऑब्जेक्ट बनाना होगा।

 using OpenQA.Selenium.Support.UI;

 // select the drop down list
 var education = driver.FindElement(By.Name("education"));
 //create select element object 
 var selectElement = new SelectElement(education);

 //select by value
 selectElement.SelectByValue("Jr.High"); 
 // select by text
 selectElement.SelectByText("HighSchool");

अधिक जानकारी यहाँ


एक आकर्षण की तरह काम करता है धन्यवाद! कि मेरे परीक्षण के लिए तेजी से चीजें बनाता है!
मिरज़ा

एक बग है। var selectElement = new SelectElement(education);होना चाहिए:var selectElement = new SelectElement(element);
ग्रेग गौथियर

52
FYI करें: सेलेक्ट एलीमेंट का उपयोग करने के लिए, आपको सेलेनियम वेबड्राइवर सपोर्ट पैकेज को शामिल करने की आवश्यकता है जो सेलेनियम वेबड्राइवर की तुलना में एक अलग NuGet पैकेज है। नामस्थान OpenQA.Selenium.Support.UI शामिल करें।
जेम्स लॉरुक

मैं फ़ायरफ़ॉक्स ड्राइवर, सेलेनियम संस्करण 2.53.1 और समर्थन लाइब्रेरी 2.53 का उपयोग कर रहा हूं, द सिलेक्ट टेक्स्ट कस्टम काम नहीं कर रहा है। सभी विकल्पों को देखने में सक्षम। यहां तक ​​कि अगर मैं विकल्पों को पुनरावृत्त करता हूं और सही मान सेट करता हूं, तो मान सेट नहीं हो रहा है..किसी भी मदद से महान होगा
विस्वास मेनन

3
क्या आपने अन्य ड्राइवरों या सिर्फ फ़ायरफ़ॉक्स की कोशिश की? इसके अलावा, पैकेज का तकनीकी नाम वर्तमान में सेलेनियम है। समर्थन करें।
डैन सेशरपस्टर

13

इस पर एक बिंदु जोड़ते हुए- मुझे एक समस्या आई कि OpenQA.Selenium.Support.UI नाम स्थान C # प्रोजेक्ट में सेलेनियम.नेट बाइंडिंग स्थापित करने के बाद उपलब्ध नहीं था। बाद में पता चला कि हम कमांड चलाकर आसानी से सेलेनियम वेबड्राइवर सपोर्ट क्लासेस का नवीनतम संस्करण स्थापित कर सकते हैं:

Install-Package Selenium.Support

NuGet पैकेज मैनेजर कंसोल में, या NuGet मैनेजर से Selenium.Support स्थापित करें।


9

दूसरा तरीका यह हो सकता है:

driver.FindElement(By.XPath(".//*[@id='examp']/form/select[1]/option[3]")).Click();

और आप अनुक्रमणिका को उस विकल्प की संख्या से बदल सकते हैं, जिसे आप चुनना चाहते हैं।

मुझे नहीं पता कि यह सबसे अच्छा तरीका है लेकिन मुझे आशा है कि आपकी मदद करेंगे।


मुझे यकीन नहीं है कि यह हर समय काम करता है। किसी ने इसे इस तरह से किया और यह काम नहीं किया और मैं मैथ्यू लॉक द्वारा सुझाए गए कोड को कोड में बदलने के लिए समाप्त हो गया
फ्रैक्टल

3

एक विकल्प Via पाठ का चयन करने के लिए;

(new SelectElement(driver.FindElement(By.XPath(""))).SelectByText("");

मूल्य के माध्यम से एक विकल्प का चयन करने के लिए:

 (new SelectElement(driver.FindElement(By.XPath(""))).SelectByValue("");

3

सेलेनियम वेबड्राइवर सी # ड्रॉप डाउन से आइटम का चयन करने के लिए कोड:

IWebElement EducationDropDownElement = driver.FindElement(By.Name("education"));
SelectElement SelectAnEducation = new SelectElement(EducationDropDownElement);

ड्रॉप डाउन आइटम का चयन करने के 3 तरीके हैं: i) पाठ द्वारा चयन करें ii) अनुक्रमणिका iii द्वारा चयन करें) मूल्य द्वारा चयन करें

पाठ द्वारा चयन करें:

SelectAnEducation.SelectByText("College");//There are 3 items - Jr.High, HighSchool, College

सूचकांक द्वारा चुनें:

SelectAnEducation.SelectByIndex(2);//Index starts from 0. so, 0 = Jr.High 1 = HighSchool 2 = College

मूल्य द्वारा चयन करें:

SelectAnEducation.SelectByValue("College");//There are 3 values - Jr.High, HighSchool, College

2

आपको केवल मान पास करने और कुंजी दर्ज करने की आवश्यकता है:

driver.FindElement(By.Name("education")).SendKeys("Jr.High"+Keys.Enter);

संभावना असफल हो जाएगी यदि ड्रॉपडाउन में समान पाठ के साथ कई विकल्प हैं।
एंटटी

1

यह मेरे लिए कैसे काम करता है (आईडी द्वारा नियंत्रण का चयन करना और पाठ द्वारा विकल्प):

protected void clickOptionInList(string listControlId, string optionText)
{
     driver.FindElement(By.XPath("//select[@id='"+ listControlId + "']/option[contains(.,'"+ optionText +"')]")).Click();
}

उपयोग:

clickOptionInList("ctl00_ContentPlaceHolder_lbxAllRoles", "Tester");

0

यदि आप ड्रॉप-डाउन बॉक्स से किसी भी चयन की तलाश कर रहे हैं, तो मुझे "इंडेक्स द्वारा चयन" विधि भी बहुत उपयोगी लगती है।

if (IsElementPresent(By.XPath("//select[@id='Q43_0']")))
{
    new SelectElement(driver.FindElement(By.Id("Q43_0")))**.SelectByIndex(1);** // This is selecting first value of the drop-down list
    WaitForAjax();
    Thread.Sleep(3000);
}
else
{
     Console.WriteLine("Your comment here);
}

0
 var select = new SelectElement(elementX);
 select.MoveToElement(elementX).Build().Perform();

  var click = (
       from sel in select
       let value = "College"
       select value
       );

4
कृपया अपने कोड में एक स्पष्टीकरण जोड़ें: यह प्रश्न का उत्तर क्यों है और क्या यह पहले दिए गए उत्तरों से अलग है?
नंदेर स्पेरस्ट्रा

0
IWebElement element = _browserInstance.Driver.FindElement(By.XPath("//Select"));
IList<IWebElement> AllDropDownList = element.FindElements(By.XPath("//option"));
int DpListCount = AllDropDownList.Count;
for (int i = 0; i < DpListCount; i++)
{
    if (AllDropDownList[i].Text == "nnnnnnnnnnn")
    {
        AllDropDownList[i].Click();
        _browserInstance.ScreenCapture("nnnnnnnnnnnnnnnnnnnnnn");
    }
}

Dropdownlist चयन के साथ काम करता है
जेम्स
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.