Selenium не находит ссылки, кнопки, тексты в GWT? - PullRequest
2 голосов
/ 19 декабря 2010

Я только что попробовал протестировать свое веб-приложение GWT с Selenium.Я записал что-то с помощью плагина Selenium IDE Firefox (регистрация -> войти -> выйти).Но мой тест всегда терпит неудачу при выходе из системы, потому что Selenium не находит ссылку.Я снова запустил тест, и затем это сработало.Я предполагаю, что это как-то связано со скоростью ответа?Я также сделал некоторые другие тесты, и они всегда терпят неудачу, потому что ссылки, кнопки или тексты не найдены.Как я могу решить это?Проблема, которую Selenium проверяет, пока страница еще не готова?Будет ли Thread.sleep работать до проверки или нажатия кнопок / ссылок или, может быть, что waitForPageToLoad?

1 Ответ

3 голосов
/ 19 декабря 2010

Вы правы в отношении проблемы. 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);
  }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...