Selenium Webdriver C# - 未选择Firefox下拉菜单文本

时间:2012-08-01 16:29:37

标签: c# c#-4.0 selenium webdriver selenium-webdriver

我正在尝试使用C#中的Selenium webdriver从下拉菜单中选择一个文本 它与Chrome浏览器完美配合,但不适用于Firefox。任何人都可以帮我解决这个问题。

我正在使用的代码如下所示。

public void SelectCountry1(string country)
{
var countryDropDown = Driver.FindElement(By.XPath(xpathidofthecountrydropdown));
countryDropDown .Click();
//Driver.FindElement(By.XPath(xpathidofthecountrydropdown)).Click;
var selectElement = new SelectElement(countryDropDown);
selectElement.SelectByText(country);
}

我可以调用此函数,这是成功执行的,没有任何错误消息。我无法选择预期的关键字,尽管它存在。

目前我有一个解决方法,即单击相同的ID两次,这使代码工作。评论部分没有注释但我不认为这是正确的解决方法。让我知道你对此的看法。

谢谢

2 个答案:

答案 0 :(得分:0)

通常,select类会处理选择,而不需要单击下拉列表。它应该在FF和Chrome中都有效,即Select有一些其他问题。尽量不要单击下拉按钮。如果选择类不起作用,它会尝试单击并导航向下发送向下键然后按Enter键的选项。

答案 1 :(得分:0)

是的,它与Firefox不兼容。我不得不使用它作为使用jQuery的变通方法。如果页面上没有jQuery,请随意使用常规JavaScript修改此代码。

public static void SetDropdownSelectedOptionByText(IWebDriver driver, string tagId, string newText, int sleepTime)
{
    // not working when selecting client id of certain types of ASP.NET user controls
    //new SelectElement(driver.FindElement(By.Id(tagId))).SelectByText(newText);  

    IJavaScriptExecutor js = driver as IJavaScriptExecutor;
    js.ExecuteScript("$('#" + tagId + " option:contains(" + Element.NonNullValue(newText) + ")').attr('selected', 'selected')");
    js.ExecuteScript("$('#" + tagId + "').change()");
    System.Threading.Thread.Sleep(sleepTime);  // wait for dependent dropdown to load its values
}