【问题标题】:Selenium doesn't find links, buttons, texts in GWT?Selenium 在 GWT 中找不到链接、按钮、文本?
【发布时间】:2011-05-27 16:27:27
【问题描述】:

我刚刚尝试使用 Selenium 测试我的 GWT Web 应用程序。我用 Selenium IDE Firefox 插件录制了一些东西(注册 -> 登录 -> 注销)。但是我的测试在注销部分总是失败,因为 Selenium 没有找到链接。我再次运行测试,然后它工作了。我想这与响应速度有关吗?我还进行了一些其他测试,但它们总是失败,因为找不到链接、按钮或文本。我该如何解决? Selenium 在页面尚未准备好时检查的问题是什么? Thread.sleep 在检查或按下按钮/链接之前是否可以工作,或者可能是 waitForPageToLoad?

【问题讨论】:

    标签: java testing gwt selenium


    【解决方案1】:

    您对问题的看法是正确的。 Selenium 在 Javascript 使用内容填充您的 DOM 树之前运行测试。您可以使用 Thread.sleep(),但是如果您的应用程序运行速度比您预期的慢,这会减慢您的测试速度并且偶尔会失败。最好等待元素,直到超时到期。

    我所有的测试都扩展了这个类,而后者又扩展了 SeleneseTestCase,并且在我的测试中我没有调用 selenium.type(),而是调用了 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 中有一个“等待”,com.thoughtworks.selenium 中有一个。我正在使用 com.thoughtworks.selenium.Wait,希望这是正确的吗?到目前为止,我用我的一项测试试了你的课,它奏效了。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2018-10-16
    • 1970-01-01
    相关资源
    最近更新 更多