是否值得使用Selenium com.thoughtworks.selenium.Wait类进行等待? (性能)

时间:2011-03-09 23:21:47

标签: java selenium wait

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然后每次创建新对象的速度有多快?这种差异有多大?

3 个答案:

答案 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必须始终等待最长的睡眠时间。