#c# #selenium-webdriver #firefox #windows-10
#c# #selenium-webdriver #firefox #windows-10
Вопрос:
Я пытаюсь заполнить некоторые значения в MS forms, например, this
для тестирования, для ввода [type = text] все прошло нормально, я могу просто выбрать его и использовать SendKeys (), но там, где есть список опций, как показано на рисунке ниже, который не является обычным выбором HTML, поэтому я не знаю, как установить там опцию. Как я могу это сделать? Я пробовал это:
IWebDriver driver; // assume assigned
IWebElement ele = driver.FindElement(By.XPath("//div[title='Select your answer']"));
ele.FindElement(By.XPath("//span[text()='Bahamas']")).Click();
но это зависает приложение.
Ответ №1:
Выпадающие списки могут быть обработаны с помощью Select class
SelectElement oSelect = new SelectElement(driver.FindElement(By.XPath("//div[title='Select your answer']")));
oSelect.selectByText("Andorra");
или по индексу
//keep in mind that the index starts from 0, not from 1
oSelect.SelectByIndex(3);
или по атрибуту Html value
oSelect.SelectByValue("Andorra");
Подробнее о выборе, параметрах можно найти здесь
Ответ №2:
Поскольку это не select
тег типа, который вы не можете использовать, Select
методы selenium, такие как byIndex
, ByValue
и т.д. Наилучший возможный способ справиться с таким выпадающим списком — использовать JavaScriptExecutor
:
// Click on dropdown field so that options will be available for select. Note in few cases this step wont be necessary
driver.FindElement(By.XPath("//div[title='Select your answer']")).Click();
IJavaScriptExecutor executor = (IJavaScriptExecutor)driver;
//Click on option you want to select
executor.ExecuteScript("arguments[0].click();",driver.FindElement(By.XPath("//span[text()='Bahamas']")));