从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;
}
}
答案 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
希望它有所帮助.. :)