选择Specflow&中的特定下拉菜单列表项。硒

时间:2014-05-28 15:41:09

标签: .net selenium-webdriver specflow

我正在尝试使用Specflow(.NET)和Selenium Web驱动程序从选择下拉列表中选择特定选项(这些选项将作为表单提交的一部分发布)。

我正在尝试以下内容(当我单步执行代码时它会起作用 - 即选项似乎在Web浏览器中被选中,但是一旦我执行代码实际上选项无法正常工作):

selectWebElement.Click();
selectWebElement.FindElement(By.XPath("//option[text() = '" + text + "']")).Click();

我的代码中是否需要某种等待?有没有人知道这样做的防弹方法?

更新

自发布以来,我了解到通过它的文本设置所选选项的更优雅方式是:

new SelectElement(selectWebElement).SelectByText(text);

但是,这似乎无法解决问题。我之前没有提到的另一件事是表单实际上在iFrame中,我使用以下内容切换到它:

WebDriver.SwitchTo().Frame(iframeElement);

不确定iframe中的事实是否会导致问题,但我可以成功获取对select元素的引用。 (该表单还有一些我可以成功访问和设置的文本输入元素等。)

2 个答案:

答案 0 :(得分:0)

是的,您可能需要在两个步骤之间添加一个短暂的等待,因为下拉菜单需要一小段时间来制作动画并完全显示。如果第二次单击发生得太快,则可能导致失败。

一个简单的固定等待时间,比如一秒应该有效。您可以明确地等待动画完成,但在简单的下拉菜单中,短暂的固定等待就足够了。

答案 1 :(得分:0)

不要明确点击下拉列表,只需使用webdriver API调用,如下所示:

selectWebElement.selectByVisibleText("&#34);

selectWebElement.selectByIndex();

selectWebElement.selectByValue("&#34);