我正在尝试替换测试中的所有(或至少大部分(Thread.Sleep((,看起来System.Timers可以完成这项工作,但我不知道如何实现它。
或者,如果你们知道另一个替代者,请告诉我。
如果有人在这里帮助我,我将不胜感激。
谢谢。
编辑:对不起,这是我的第一个问题,我应该举一个例子:
public void AdditionalCardIssueNoBankBranchSelected()
{
additionalCardApplicationPage.ClearBankConsultantCodeField();
additionalCardApplicationPage.TypeSalesOfficer();
additionalCardApplicationPage.TypeEIKBankCustomerAndPressGetDataButton();
additionalCardApplicationPage.ChooseMainCard();
chooseMainCardPage.TypeCustomerEikAndPressSearchButton();
Thread.Sleep(1000);
bankCardSearchPage.SelectFirstValidBankCardOther();
chooseMainCardPage.PressChooseMainCardButton();
additionalCardApplicationPage.PressStartApplicationButton();
Thread.Sleep(1000);
IAlert alert = driver.SwitchTo().Alert();
alert.Accept();
Assert.IsTrue(additionalCardApplicationPage.BankBranchCodeAlert.Displayed);
}
所以我有Thread.Sleep()
的地方几乎都是因为我在等待页面完全加载,因为如果不加载,下一个操作就不会发生,因为我想要交互的元素还不可见。有时bankCardSearchPage.SelectFirstValidBankCardOther((将无法通过,因为卡所在的表还不可见。
我希望我解释得很好。非常感谢。
Thread.sleep()
这是一个明确的等待,但最糟糕的是。
最好的如下(显式等待(:
var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
wait.Until(ExpectedConditions.ElementToBeClickable(By.XPath("//span[text()='OK']/..")));
您几乎可以用上面提到的动态等待来替换所有内容。
它所要做的是在DOM中为每个500ms
until 20 seconds
(就像我们的have defined 20 in the above object creation
(查找web元素,如果找到它,它将返回web element
,如果不是Timeout exception will be raised.