如何在Selenium WebDriver的操作之间暂停

时间:2014-05-19 22:08:35

标签: asp.net-mvc-4 selenium ui-automation

我已经阅读了所有的"你为什么要这样做"答案,并且不要那样做,这样做"答案。我同意在自动化测试中暂停是没有意义的,除非你真的在等待条件到达。

那就是说,有时候我想要逐步完成'在开发过程中,没有断点的操作列表可以在不中断的情况下顺利运行测试。此外,有时通过断点进行完全断点测试。所以这就是场景:我有隐藏的菜单,当它们悬停在它们上面时,然后当你将鼠标悬停在现在可见的选项上时,当鼠标从一个移动到另一个时,它们会通过改变它们的背景颜色来突出显示;常见菜单场景。我希望自动化那件事,并且能够看到它在我开发它的同时工作,然后当我喜欢我所看到的时候把它扔掉。对不起,我不是在喊,只是强调。

所以我得到了菜单的顶部元素,然后是可供选择的选项列表。然后按顺序将鼠标悬停在前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();

是的我可以设置断点,但是如果我在每个MoveToElement调用之间放置隐式等待或Thread.Sleep(5000),则没有暂停。因此,它通过lickity-split而不是为了睦邻而眨眼。

这不是一个关键问题,我同意。但为什么没有什么可以暂停呢?

4 个答案:

答案 0 :(得分:0)

大多数人使用FluentWait(例如WebDriverWait)等待元素出现,然后再继续。这个网站和互联网上有很多例子。只需创建一个名为waitForElementToAppear( By locator )的方法,然后将其填入您的实现中。

答案 1 :(得分:0)

在我的java自动化框架中,我使用WebDriver $ Timeouts.class接口 - implicitlyWait(长时间,TimeUnit单元)方法。

webdriver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

此方法指定驱动程序在搜索元素时应等待的时间(如果不是立即存在)。

我很确定你会找到适合你代码的东西。希望这会有所帮助。

答案 2 :(得分:0)

由于你似乎想要在没有真正等待某事时暂停的东西,我怀疑应该使用FluentWaitWebDriverWait(如另一个答案所述),但是告诉我它等待你知道的情况不会发生并抓住并忽略TimeoutException

的内容
try {
    WebDriverWait wait = new WebDriverWait(driver, timeoutInSeconds, sleepInMilliseconds);
    wait.until(Predicates.<WebDriver> alwaysFalse());
}
catch(TimeoutException e) {
    //Ignore the timeout.  It's what we *want* to happen.
}

使用带有番石榴谓词的WebDriverWait until的重载。

您希望通过适当选择睡眠时间来最大限度地减少对病情的调查。

答案 3 :(得分:0)

您可以在操作之间使用pause

(new Actions(driver))
.clickAndHold(car1)
.moveToElement(car2Tail)
.pause(java.time.Duration.ofSeconds(2))
.release(car1).build()
.perform();