Selenium IDE生成的代码不使用WebDriverWait.Until

时间:2016-07-19 23:17:18

标签: selenium nunit selenium-ide

从selenium ide生成NUnit代码时,clickAndWait等等命令会使用循环生成一个尴尬的模式。

使用WebDriverWait.until

是不是更好?

或者我得错了什么?

更新: 对不起,从内存中写道,我所指的代码在waitForElement命令而非clickAndWait

这是我所指的代码:

// waitForElementPresent | id=id |             
for (int second = 0; ; second++)
{
    if (second >= 60) Assert.Fail("timeout");
    try
    {
        if (IsElementPresent(By.Id("id"))) break;
    }
    catch (Exception)
    { }
    Thread.Sleep(1000);
}    

private bool IsElementPresent(By by)
{
    try
    {
        driver.FindElement(by);
        return true;
    }
    catch (NoSuchElementException)
    {
        return false;
    }
}

阅读各种指南和其他答案,在我看来,更好的解决方案就是这个:

// waitForElementPresent | id=id |             
if (!WaitForElementPresent(By.Id("id"))) { Assert.Fail(); }

private bool WaitForElementPresent(By by)
{
    var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60));
    try
    {
        wait.Until(drv => drv.FindElement(by));
        return true;
    }
    catch (Exception)
    {
        return false;
    }
}

1 个答案:

答案 0 :(得分:0)

是的,使用System.out.print("Name: "); contactName = input.nextLine(); System.out.print("Number: "); contactNumber = input.nextDouble(); System.out.print("Address: "); input= new Scanner(System.in); contactAddress = input.nextLine(); System.out.print("E-mail: "); contactEmail= input.nextLine(); 是等待元素存在的更好方法,但是不应该创建自己的自定义WebDriverWait,而应该使用selenium提供的ExpectedConditions.ElementExists函数来等待元素存在,如下所示: -

ExpectedConditions

希望它有所帮助.. :)