簡體   English   中英

Selenium:Firefox驅動程序,在C#中使用SelectElement從下拉列表中選擇一項無法正常工作

[英]Selenium : Firefox Driver, Selecting an item from a dropdown using SelectElement in c# not working correctly

我正在嘗試做一個簡單的任務,嘗試使用顯示的文本在下拉列表中選擇一個值。 情況如下。

我的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>

通過使用硒,我想使用下拉菜單中的第二項,即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)

有人遇到過這個問題嗎? 如果您能指出正確的方向,那將是很好的。

如果您已嘗試使用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下拉列表。 這是代碼:

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

這樣就無需升級Firefox

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM