给定一个带有<select>
元素和一些<option>
的页面,点击该页面会导致浏览器打开一个新的URL,如(省略JavaScript代码):
<select>
<option value="here">go here</option>
<option value="there">go there</option>
</select>
当我使用 WebDriver 自动执行此行为时,我会调用
hereOrThereSelectElement.SelectByValue("here");
然后等到新页面加载完毕。
在我的情况下,新位置的页面加载需要超过60秒(故意),因此我不得不增加WebDriver实例的命令超时。不幸的是,此超时将影响使用相同WebDriver实例创建的所有其他测试。
此外,我想执行显式等待新页面加载(在测试场景中将其标记为长时间运行),但在这种情况下,将在SelectByValue
命令成功后调用下一个命令 - 所以不再需要等待了。
我查看了源代码并意识到SelectByValue
命令使用Click
逻辑,等待页面加载(如果需要)。
所以我的问题是:如何在不等待加载新页面的情况下明确执行SelectByValue
(或Click
)?
更新 我在代码中真正想要的是:
// the following command should not wait for the new page to load
hereOrThereSelectElement.SelectByValueButDoNotWait("here");
webDriverWait.Until(/* some "page has loaded" check */)
答案 0 :(得分:0)
最后,我找到了解决方案。
与此同时,问题稍微转移到对WebElement Click()
方法的调用,该方法遇到了超时。尽管如此,以下解决方案也适用于调用SelectByValue()
的原始问题。
因此,可以使用Selenium的Actions
低级别交互构建器对元素执行单击。
var actions = new Actions(webDriver);
actions
.MoveToElement(aClickableWebElement);
.Click();
.Build()
.Perform();
也许这会帮助任何有类似问题的人。