如何在SelectElement.SelectByValue()之后不等待页面加载

时间:2012-11-29 14:44:29

标签: c# webdriver selenium-webdriver

给定一个带有<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 */)

1 个答案:

答案 0 :(得分:0)

最后,我找到了解决方案。

与此同时,问题稍微转移到对WebElement Click()方法的调用,该方法遇到了超时。尽管如此,以下解决方案也适用于调用SelectByValue()的原始问题。

因此,可以使用Selenium的Actions低级别交互构建器对元素执行单击。

var actions = new Actions(webDriver);
actions
  .MoveToElement(aClickableWebElement);
  .Click();
  .Build()
  .Perform();

也许这会帮助任何有类似问题的人。