C# 使用Selenium(C)通过文本从下拉列表中选择项目

C# 使用Selenium(C)通过文本从下拉列表中选择项目,c#,selenium,selenium-webdriver,C#,Selenium,Selenium Webdriver,我一直在试图弄明白这一点,这里的硒专家可能会提供一些帮助。我在我的页面上有一个下拉列表,我正在尝试从测试中选择一个选项,但我似乎无法正确选择。 我已经尝试了下面的例子,我经常看到选择项目。选项总是将文本显示为空字符串,即使我可以在HTML标记中看到选项文本 wait.Until(d => ExpectedConditions.ElementExists(By.Id("Cars"))); var carStatusDropDown = new SelectElement(_driver.Fi

我一直在试图弄明白这一点,这里的硒专家可能会提供一些帮助。我在我的页面上有一个下拉列表,我正在尝试从测试中选择一个选项,但我似乎无法正确选择。 我已经尝试了下面的例子,我经常看到选择项目。选项总是将文本显示为空字符串,即使我可以在HTML标记中看到选项文本

wait.Until(d => ExpectedConditions.ElementExists(By.Id("Cars")));
var carStatusDropDown = new SelectElement(_driver.FindElement(By.Id("Cars")));
carStatusDropDown.SelectByText(filter.CarStatus);
我想这是因为浏览器可能看不到这些选项,所以我尝试单击下拉引导旁边的按钮,以便在它选择文本之前打开它

wait.Until(ElementIsClickable(By.XPath("/html/body/div[2]/div[2]/div/div[2]/div[1]/div/form/fieldset/div[3]/div/div[1]/span[2]/div/div/span")));
IWebElement ddlButton = _driver.FindElement(By.XPath("/html/body/div[2]/div[2]/div/div[2]/div[1]/div/form/fieldset/div[3]/div/div[1]/span[2]/div/div/span"));
ddlButton.Click();

wait.Until(d => ExpectedConditions.ElementExists(By.Id("Cars")));
var carStatusDropDown = new SelectElement(_driver.FindElement(By.Id("Cars")));
carStatusDropDown.SelectByText(filter.CarStatus);
我可以看到DDL按钮打开下拉列表,但我仍然得到>OpenQA.Selenium.ElementNotVisibleException 当它尝试选择ByText时。在VS中,我可以看到选项文本仍然显示,并且显示的属性对于它们来说是false。我如何才能找到选项,任何反馈都将不胜感激,我在下面发布HTML。奇怪的是,有两个下拉列表,一个是a,另一个出现在下面,我正在尝试访问测试代码中的一个。firebug中的select one在标记中显示为褪色

HTML:


看起来有另一个动作依赖于这个dropdwon。默认情况下,此下拉列表不可见。所以,最好是看看之前的行动是什么让它可见的

((IJavaScriptExecutor)Driver).ExecuteScript("document.getElementById('Cars').removeAttribute('style');");

By id = By.Id('Cars');
var carStatusDropDown = new SelectElement(_driver.FindElement(id));
carStatusDropDown.SelectByText(filter.CarStatus);
但是,另一种解决方法是执行简单的javascript,使下拉列表可见,并选择所需的预期元素。 removeAttribute应删除style属性以使列表可见

((IJavaScriptExecutor)Driver).ExecuteScript("document.getElementById('Cars').removeAttribute('style');");

By id = By.Id('Cars');
var carStatusDropDown = new SelectElement(_driver.FindElement(id));
carStatusDropDown.SelectByText(filter.CarStatus);

你也可以分享html吗?我也刚刚用html更新过。我对Bootstrap的工作方式还不是一个专家,但它看起来像是实际的元素是不可见的,JavaScript小部件框架使用和元素来模拟下拉列表,而幕后的JavaScript实际设置了元素的值。您可以绕过引导框架,通过JavaScript使页面可见,也可以操纵页面上实际可见的元素。非常感谢Saifur…我有一段时间被卡住了,我使用JavaScript删除了style元素,然后SelectElement可以通过文本进行选择…希望它也能帮助其他人