Я обнаружил, что использование jQuery работает лучше, чем класс SelectElement WebDriver.
Попробуй это. Обратите внимание, как я вызываю событие jQuery .change (событие JavaScript onchange). У меня есть другое раскрывающееся меню, которое зависит от этого раскрывающегося списка, поэтому для заполнения зависимого раскрывающегося списка необходимо вызвать это событие. Чтобы заставить это работать, мне также пришлось включить Native Events для моего драйвера Firefox. Я вижу, вы выбираете по значению, а не по тексту опции. Вы должны быть в состоянии изменить мой код JQuery с кодом, который работает для выбора по значению. Кроме того, если вы работаете с элементами управления ASP.NET, использование кода WebDriver не будет работать должным образом, поскольку идентификатор является динамическим в зависимости от браузера. Таким образом, вам придется получить идентификатор с помощью jQuery, используя идентификатор клиента. Я вставил этот код ниже также, если это так для вас.
public static void SetDropdownSelectedOptionValue(IWebDriver driver, string tagId, string newValue)
{
//new SelectElement(driver.FindElement(By.Id("book-country_id"))).SelectByText(newValue);
IJavaScriptExecutor js = driver as IJavaScriptExecutor;
js.ExecuteScript("$('#" + tagId + " option:contains(" + newValue + ")').attr('selected', 'selected')");
js.ExecuteScript("$('#" + tagId + "').change()");
//driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(Config.WAIT_TIME));
System.Threading.Thread.Sleep(1000);
}
Требуется при вызове нативного события onchange.
FirefoxProfile firefoxProfile = new FirefoxProfile();
firefoxProfile.EnableNativeEvents = true;
При использовании элементов управления ASP.NET используйте этот код jQuery, а не явный идентификатор. Конечно, измените этот код, чтобы поместить tagId между ними, чтобы получить селектор jQuery.
$('#<%=dropdownid.ClientID %>')