Selenium: Firefox驱动程序,在c#中使用SelectElement从下拉菜单中选择项目不能正常工作

本文关键字:不能 项目 选择 常工作 工作 下拉菜单 SelectElement 驱动程序 Firefox Selenium | 更新日期: 2023-09-27 18:01:41

我试图做一个简单的任务,试图通过使用显示的文本在下拉菜单中选择一个值。场景如下所示。

我的HTML看起来像。

<div id="TestContainer" class="col-md-4">
    <select onchange="Test()">
        <option>Test1</option>
        <option>Test2</option>
        <option>Test3</option>
        <option>Test4</option>
    </select>
</div>

通过使用selenium,我想使用下拉列表中的第二项test2。我写的c#代码是。

FirefoxDriverService service = FirefoxDriverService.CreateDefaultService();
service.FirefoxBinaryPath = @"C:'Program Files (x86)'Mozilla Firefox'firefox.exe";
string localURL = "http://localhost:82/";
using (IWebDriver driver = new FirefoxDriver(service))
  {
         driver.Navigate().GoToUrl(localURL);
         var div = driver.FindElement(By.Id("TestContainer"));
         div.Click();
         IWebElement dropDownListBox = div.FindElement(By.TagName("select"));
         SelectElement demoSelect = new SelectElement(dropDownListBox);
         demoSelect.SelectByText("Test2");
         driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));
   }

除此之外,我甚至尝试逐一迭代选项并选择合适的项目,如下面所示,也无济于事。

if (option.Text.Equals("Test2"))
{
    option.Click();
           driver.Manage().Timeouts().ImplicitlyWait(TimeSpan.FromSeconds(2));
    break;
 }

在上述两种情况下,代码不会中断,也不会抛出异常,但值不会被选择,似乎没有发生任何事情。

我正在使用的硒的版本如下。

<package id="Selenium.Support" version="2.53.1" targetFramework="net452" />
<package id="Selenium.WebDriver" version="2.53.1" targetFramework="net452" />
<package id="WebDriver.GeckoDriver"version="0.9.0"targetFramework="net452" />

我用的是最新版本的firefox (48.0)

以前有人遇到过这个问题吗?如果你能给我指个方向就太好了。

Selenium: Firefox驱动程序,在c#中使用SelectElement从下拉菜单中选择项目不能正常工作

如果您尝试了SelectElement的所有方法来选择option但未获得成功,则可以尝试使用IJavascriptExecutor的另一种解决方案:-

 IWebElement dropDownListBox = driver.FindElement(By.cssSelector("#TestContainer select"));
((IJavaScriptExecutor)driver).ExecuteScript("var select = arguments[0]; for(var i = 0; i < select.options.length; i++){ if(select.options[i].text == arguments[1]){ select.options[i].selected = true; } }", dropDownListBox, "Test2");

完整代码:

using (IWebDriver driver = new FirefoxDriver(service))  
  {
      driver.Navigate().GoToUrl(localURL);
      IWebElement dropDownListBox = driver.FindElement(By.cssSelector("#TestContainer select"));
      ((IJavaScriptExecutor)driver).ExecuteScript("var select = arguments[0]; for(var i = 0; i < select.options.length; i++){ if(select.options[i].text == arguments[1]){ select.options[i].selected = true; } }", dropDownListBox, "Test2");
   }

我也有这个确切的问题。

<package id="Selenium.Support" version="2.53.1" targetFramework="net452" />
<package id="Selenium.WebDriver" version="2.53.1" targetFramework="net452" />
<package id="WebDriver.GeckoDriver"version="0.9.0"targetFramework="net452" />

和运行FireFox版本48.0..

在FireFox升级到49.0.1版本后,SelectElement类终于能够完成它的工作了

Javascriptexecutor是可检测的网站,我有同样的问题,我解决了它创建一个网页元素下拉。下面是代码:

WebElement dropdown = driver.findElement(By.id("serverLogin")); 
    dropdown.sendKeys(server);  
    dropdown.sendKeys(Keys.ENTER);

这样就不需要升级firefox了