我正在尝试使用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元素的引用。 (该表单还有一些我可以成功访问和设置的文本输入元素等。)
答案 0 :(得分:0)
是的,您可能需要在两个步骤之间添加一个短暂的等待,因为下拉菜单需要一小段时间来制作动画并完全显示。如果第二次单击发生得太快,则可能导致失败。
一个简单的固定等待时间,比如一秒应该有效。您可以明确地等待动画完成,但在简单的下拉菜单中,短暂的固定等待就足够了。
答案 1 :(得分:0)
不要明确点击下拉列表,只需使用webdriver API调用,如下所示:
selectWebElement.selectByVisibleText("&#34);
或
selectWebElement.selectByIndex();
或
selectWebElement.selectByValue("&#34);