在Visual Studio 2019中使用C#和Selenium进行测试时,我可以使用System.Timers作为T



我正在尝试替换测试中的所有(或至少大部分(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中为每个500msuntil 20 seconds(就像我们的have defined 20 in the above object creation(查找web元素,如果找到它,它将返回web element,如果不是Timeout exception will be raised.

最新更新