Java 是否值得为等待使用Selenium com.thoughtworks.Selenium.Wait类?(表演)

Java 是否值得为等待使用Selenium com.thoughtworks.Selenium.Wait类?(表演),java,selenium,wait,Java,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, TI

硒具有方便性。我以下一种方式使用它:

public void waitForElement(final String locator){
    Wait a = new Wait(){
        @Override public boolean until(){
             selenium.isElementPresent(locator);
        }
    }

    a.wait("Cannot found locator " + locator, TIMEOUT);
}
据我所知,每次调用函数时,都会创建一个新的匿名类,然后创建该类的对象。还是只创建一个匿名类


无论如何。直接在
waitForElement
方法中使用
Thread.sleep()
然后每次创建新对象的速度有多快?这个差别有多大?

我敢说差别很小,您应该使用使代码更具可读性的东西。在我个人看来,使用Wait类更具可读性。

准确地说,匿名类只创建一次(在编译过程中),并且只加载一次

每次调用该方法时,它都会被实例化,但开销非常小

如果经常这样做,则可以轻松创建(非匿名)类:

然后你可以做更简单的

new ElementPresenceWait("foo").wait(1000);

我不熟悉com.thoughtworks.selenium.Wait的内部实现,但是通常我更喜欢编写“智能等待”,它首先检查,然后休眠四分之一秒,然后再次检查,然后休眠,直到达到最大超时


这允许在等待线程以外的东西时更快地执行。睡眠必须始终等待最长的睡眠时间。

这些“智能等待”很好,并且正常工作,但我发现有少数情况下脚本有“超出”浏览器的倾向(例如,没有给javascript加载时间)没有好的方法来检测这种转变。InternetExplorer公开了readystate属性来告诉它何时加载或不加载,如果AJAX需要的话,它与javascript注入相结合对我来说是有效的。事实上,我不记得什么时候没有。(但这并不意味着它总是100%有效)谢谢。这就是方法。我甚至可以为locator属性创建setter,所以我甚至不应该每次都创建新实例,只是更改locatorproperty@nahab:你可以,但我不会那样做。创建对象的开销非常非常小(特别是当您的程序准备等待1000毫秒时),拥有一个不可变的对象只会使大量问题变得不可能。@djangofan我的问题早了半年@djangofan和,你没看到他们是完全不同的问题吗?我同意。我会使用标准的Wait、WebDriverWait或父类FluentWait。
new ElementPresenceWait("foo").wait(1000);