Selenium有com.thoughtworks.selenium.Wait课程以方便。我以下一种方式使用它:
public void waitForElement(final String locator){
Wait a = new Wait(){
@Override public boolean until(){
selenium.isElementPresent(locator);
}
}
a.wait("Cannot found locator " + locator, TIMEOUT);
}
据我所知每次调用我的函数时,都会创建新的匿名类,然后创建该类的对象。或者只创建一个匿名类?
反正。在Thread.sleep()
方法中直接使用waitForElement
然后每次创建新对象的速度有多快?这种差异有多大?
答案 0 :(得分:2)
确切地说,匿名类只创建一次(在compilaton期间)并且只加载一次。
每次调用方法时都会实例化,但开销很小。
如果您经常这样做,那么您可以轻松创建一个(非匿名)类:
public class ElementPresenceWait extends Wait {
private final String locator;
public ElementPresenceWait(final String locator) {
this.locator=locator;
}
@Override public boolean until(){
selenium.isElementPresent(locator);
}
public void wait(long timeoutInMilliseconds) {
wait("Cannot found locator " + locator, timeoutInMilliseconds);
}
}
然后你可以做更简单的
new ElementPresenceWait("foo").wait(1000);
答案 1 :(得分:1)
我敢说差异很小,你应该使用什么使代码更具可读性。在我个人看来,使用Wait类更具可读性。
答案 2 :(得分:0)
我不熟悉com.thoughtworks.selenium.Wait的内部实现,但一般来说我更喜欢写“智能等待”,首先检查,然后睡眠四分之一秒,然后再次检查,然后睡觉和等等,直到达到最大超时。
这样可以在等待某个东西时更快地执行.Sleep必须始终等待最长的睡眠时间。