Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 硒不';在GWT中找不到链接、按钮和文本?_Java_Testing_Gwt_Selenium - Fatal编程技术网

Java 硒不';在GWT中找不到链接、按钮和文本?

Java 硒不';在GWT中找不到链接、按钮和文本?,java,testing,gwt,selenium,Java,Testing,Gwt,Selenium,我刚刚尝试用Selenium测试我的GWT web应用程序。我用SeleniumIDEFirefox插件记录了一些东西(注册->登录->注销)。但是我的测试在注销部分总是失败,因为Selenium没有找到链接。我又做了一次测试,结果成功了。我想这和反应的速度有关吧?我还做了一些其他的测试,他们总是失败,因为没有找到链接、按钮或文本。我怎样才能解决这个问题?是Selenium在页面尚未准备好时检查的问题吗?Thread.sleep在检查或按下按钮/链接或可能是等待页面加载之前可以工作吗?关于这个问

我刚刚尝试用Selenium测试我的GWT web应用程序。我用SeleniumIDEFirefox插件记录了一些东西(注册->登录->注销)。但是我的测试在注销部分总是失败,因为Selenium没有找到链接。我又做了一次测试,结果成功了。我想这和反应的速度有关吧?我还做了一些其他的测试,他们总是失败,因为没有找到链接、按钮或文本。我怎样才能解决这个问题?是Selenium在页面尚未准备好时检查的问题吗?Thread.sleep在检查或按下按钮/链接或可能是等待页面加载之前可以工作吗?

关于这个问题,您是正确的。Selenium在Javascript用内容填充DOM树之前运行测试。你可以线程.sleep(),但是如果你的应用程序运行速度比你预期的慢,那么这会减慢你的测试速度,并且偶尔会失败。最好等到元素超时为止

我的所有测试都扩展了该类,该类反过来扩展了SeleneseTestCase,我在测试中调用type()而不是调用selenium.type():

public class WebTestCase extends SeleneseTestCase {

  private final long DEFAULT_TIMEOUT = 30;

  protected SeleniumServer server;

  public WebTestCase() {
  }

  public WebTestCase(String name) {
    super(name);
  }

  protected void startServer() throws Exception {
    server = new SeleniumServer();
    server.start();
  }

  protected void stopServer() {
    server.stop();
  }

  public void waitForElement(final String waitingElement) {
    waitForElement(waitingElement, DEFAULT_TIMEOUT);
  }

  public void waitForElement(final String waitingElement, long timeoutInSeconds) {
    new Wait() {
      @Override
      public boolean until() {
        return selenium.isElementPresent(waitingElement);
      }
    }.wait("Timeout while waiting for element " + waitingElement, timeoutInSeconds * 1000);
  }

  public void type(String element, String text) {
    waitForElement(element);
    selenium.type(element, text);
  }

  public void typeKeys(String element, String text) {
    waitForElement(element);
    selenium.typeKeys(element, text);
  }

  public void click(String element) {
    waitForElement(element);
    selenium.click(element);
  }

  public void select(String element, String value) {
    waitForElement(element);
    selenium.select(element, value);
  }

  public void check(String element) {
    waitForElement(element);
    selenium.check(element);
  }

  public void uncheck(String element) {
    waitForElement(element);
    selenium.uncheck(element);
  }

  public void focus(String element) {
    waitForElement(element);
    selenium.focus(element);
  }

  public void checkTextPresent(final String text) {
    checkTextPresent(text, DEFAULT_TIMEOUT);
  }

  public void checkTextPresent(final String text, long timeoutInSeconds) {
    new Wait() {
      @Override
      public boolean until() {
        return selenium.isTextPresent(text);
      }
    }.wait("Timeout while waiting for text \"" + text + "\"", timeoutInSeconds * 1000);
  }

  public void checkTextNotPresent(final String text) {
    checkTextPresent(text, DEFAULT_TIMEOUT);
  }

  public void checkTextNotPresent(final String text, long timeoutInSeconds) {
    new Wait() {
      @Override
      public boolean until() {
        return !selenium.isTextPresent(text);
      }
    }.wait("Timeout while waiting for text \"" + text + "\"", timeoutInSeconds * 1000);
  }

}

谢谢我试试看。我注意到selenium服务器jar中有一个“Wait”,com.thoughtworks.selenium中有一个。我正在使用com.thoughtworks.selenium.Wait,希望这是正确的?到目前为止,我在你们班上做了一次测试,效果很好。:)