Próbowałem przeprowadzić test internetowy, wybierając opcję. Przykład można znaleźć tutaj: http://www.tizag.com/phpT/examples/formex.php
Wszystko działa świetnie poza wyborem części opcji. Jak wybrać opcję według wartości lub etykiety?
Mój kod:
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
}
}
c#
webdriver
selenium-webdriver
mirza
źródło
źródło
var selectElement = new SelectElement(education);
Powinno być:var selectElement = new SelectElement(element);
Dodając do tego punkt - natrafiłem na problem polegający na tym, że przestrzeń nazw OpenQA.Selenium.Support.UI nie była dostępna po zainstalowaniu wiązania Selenium.NET w projekcie C #. Później dowiedziałem się, że możemy łatwo zainstalować najnowszą wersję Selenium WebDriver Support Classes, uruchamiając polecenie:
w konsoli Menedżera pakietów NuGet lub zainstaluj Selenium.Support z Menedżera NuGet.
źródło
Innym sposobem może być ten:
driver.FindElement(By.XPath(".//*[@id='examp']/form/select[1]/option[3]")).Click();
i możesz zmienić indeks w opcji [x] zmieniając x o liczbę elementów, które chcesz zaznaczyć.
Nie wiem, czy to najlepszy sposób, ale mam nadzieję, że to pomoże.
źródło
Aby wybrać opcję przez tekst;
(new SelectElement(driver.FindElement(By.XPath(""))).SelectByText("");
Aby wybrać opcję za pomocą wartości:
(new SelectElement(driver.FindElement(By.XPath(""))).SelectByValue("");
źródło
Kod Selenium WebDriver C # do wybierania elementu z listy rozwijanej:
IWebElement EducationDropDownElement = driver.FindElement(By.Name("education")); SelectElement SelectAnEducation = new SelectElement(EducationDropDownElement);
Istnieją 3 sposoby wyboru pozycji z listy rozwijanej: i) Wybierz według tekstu ii) Wybierz według indeksu iii) Wybierz według wartości
Wybierz według tekstu:
SelectAnEducation.SelectByText("College");//There are 3 items - Jr.High, HighSchool, College
Wybierz według indeksu:
SelectAnEducation.SelectByIndex(2);//Index starts from 0. so, 0 = Jr.High 1 = HighSchool 2 = College
Wybierz według wartości:
SelectAnEducation.SelectByValue("College");//There are 3 values - Jr.High, HighSchool, College
źródło
Wystarczy podać wartość i wprowadzić klucz:
driver.FindElement(By.Name("education")).SendKeys("Jr.High"+Keys.Enter);
źródło
Tak to działa u mnie (wybierając sterowanie przez ID i opcję przez tekst):
protected void clickOptionInList(string listControlId, string optionText) { driver.FindElement(By.XPath("//select[@id='"+ listControlId + "']/option[contains(.,'"+ optionText +"')]")).Click(); }
posługiwać się:
clickOptionInList("ctl00_ContentPlaceHolder_lbxAllRoles", "Tester");
źródło
Jeśli szukasz dowolnego elementu z listy rozwijanej, bardzo przydatna jest również metoda „wybierz według indeksu”.
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); }
źródło
var select = new SelectElement(elementX); select.MoveToElement(elementX).Build().Perform(); var click = ( from sel in select let value = "College" select value );
źródło
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"); } }
źródło