如何使用 Selenium WebDriver 在操作之间暂停

lee*_*mid 5 selenium ui-automation asp.net-mvc-4

我读过所有“你为什么要这样做”的答案,以及“不要那样做,这样做”的答案。我同意,在自动化测试中暂停是没有意义的,除非您实际上是在等待条件的到来。

也就是说,有时我想在开发过程中不带断点地“单步执行”一系列操作,以确保测试顺利运行而不会中断。此外,单步执行断点有时会完全中断测试。因此,场景如下:我有隐藏菜单,当鼠标悬停在它们上方时会显示这些菜单,然后当您将鼠标悬停在现在可见的选项上时,随着鼠标从一个选项移动到另一个选项,它们会通过更改其背景颜色来突出显示;常见的菜单场景。我希望自动化这件事,并能够在开发它的同时看到它的工作,然后当我喜欢我所看到的东西时扔掉那部分。抱歉,我不是喊叫,只是强调。

所以我得到了菜单的顶部元素,然后是可供选择的选项列表。然后按顺序将鼠标悬停在前 3 个选项上。

var element = page.WebDriver.FindElement(By.Id("actions"));
var elementLi = element.FindElements(By.TagName("li"));

Actions action = new Actions(page.WebDriver);
action.MoveToElement(element).Perform();
action.MoveToElement(elementLi[1]).Build().Perform();
action.MoveToElement(elementLi[2]).Build().Perform();
action.MoveToElement(elementLi[3]).Build().Perform();
Run Code Online (Sandbox Code Playgroud)

是的,我可以设置断点,但如果我在每个 MoveToElement 调用之间放置隐式等待或 Thread.Sleep(5000) ,则不会有暂停。IE,它贯穿了 lickity-split,甚至没有对我眨眼以示睦邻友好。

我同意,这并不是一个关键问题。但为什么中间没有任何暂停的作用呢?

dja*_*fan 1

大多数人使用FluentWait,例如WebDriverWait 等待元素出现后再继续。该网站和互联网上有很多示例。只需调用一个方法waitForElementToAppear( By locator ) ,然后用您的实现填写它即可。