Как мне выбрать параметр в этой форме вида?

#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']")));