0

给定一个包含一个<select>元素和一些<option>s 的页面,单击该页面会导致浏览器打开一个新 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(or )?Click

更新: 我的代码中真正想要的是:

// the following command should not wait for the new page to load
hereOrThereSelectElement.SelectByValueButDoNotWait("here");
webDriverWait.Until(/* some "page has loaded" check */)
4

1 回答 1

0

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

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

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

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

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

于 2012-11-30T13:56:55.143 回答