Быстрая проверка - есть элемент на странице или его нет

Т.е. вы хотите сказать, что если вы залогинелись, к примеру, в хроме, закрыли его (без логаута), запустили FF (на том же ПК), то вы окажетесь все еще залогиненным? :worried: С сопутствующим сообщением, что кто-то уже зашел…

Нет. Если вы залогинились в хроме, закрыли его без логаута, запустили FF, то вы будете на странице ввода логин/пароль. Не залогинены, но если попытаетесь зайти под тем же пользователем будет страница с сообщением что уже кто-то зашел.

Ну тогда вопросов нет. По крайней мере к вам. :slight_smile: А вот к вашим разработчикам - много…

тесты должны быть не зависимы друг от друга
т.е. если один тест вышел “некорректно” то остальные тесты это волновить не должно.
надо либо генерировать каждый раз нового юзера
либо чистить сессию из бд перед каждым запуском теста
либо еще что то спецефичное для конкретного продукта.

3 лайка

Зато мой вопрос так и остался :smile: Мы как-то отклонились от темы от “Как?” в сторону “Для чего?”

Вот тогда Вам еще в копилку костылей по данному вопросу:
Взять допустим HttpClient и перед каждым тестом на уровне запросов делать “правильный” log in и logout. Тогда перед каждым тестом учетная запись будет свободна.

1 лайк

Во время выполнения этого правильного логина/логаута так же и останутся те же самые вопросы разве нет? Точно так же ему не будет известно будет “чистый” вход или с подтверждением, что повлечет за собой такую же проверку страницы.

Почему же, теоретически отправляете последовательно три запроса: Login, Confirm, Logout.
Не важно чистый этот вход или нет, сервер от вас получит последовательность на которую допустим отреагирует ОК-NOT-OK или OK-OK-OK. В любом случае на выходе получим правильный logout.
От того что пользователь с “чистым” входом вдруг сформирует и отправит запрос на подтверждение, никто же не умрёт надеюсь, сервер ему что-то ответит и всё.

1 лайк

Мысль очень интересная, большое спасибо! Сейчас банально не хватает знаний это реализовать, но поизучаю этот вопрос

Да, вы правы, я буду стремиться к независимости тестов. Судя по всему нужно будет узнать где хранится информация о сессии и постараться реализовать метод для ее изменения

  public int iAmOnPage(WebDriver driver) {
    String id1 = "#loginform";
    String id2 = "#userinfo";
    WebElement element = new WebDriverWait(driver, 60).until(
        ExpectedConditions.presenceOfElementLocated(
            By.cssSelector(String.format("#%s, #%s", id1, id2))));
    return element.getAttribute("id").equals(id1) ? 1 : 2;
  }

  if (iAmOnPage(driver) == 1) {
    // do something on page 1
  } else {
    // do something on page 2
  }
3 лайка

Не могли бы пояснить эту строчку:

ExpectedConditions.presenceOfElementLocated(
            By.cssSelector(String.format("#%s, #%s", id1, id2))));

Здесь выполняется ожидание либо одного либо другого элемента?

Да, ищется элемент, подходящий под один из селекторов, перечисленных через запятую.

1 лайк

Быстрая проверка если нужно проверить что элемента нет

public boolean isElementNotPresent(By locator) {
    boolean isEmpty;
    driver.manage().timeouts().implicitlyWait(0, TimeUnit.SECONDS);
    isEmpty = findElements(locator).isEmpty();
    driver.manage().timeouts().implicitlyWait(Constants.SHORT_DELAY, TimeUnit.MILLISECONDS);
    return isEmpty;
  }
и если не словить false пока страница не до грузилась проверь перед этим хотя бы так 


public WrappedDriver waitForPageLoad(int delay) {
    String pageLoadState;
    do {
      pageLoadState = (String) executeScript("return document.readyState;");
      System.out.println("Page load status: " + pageLoadState);
      delay(ONE_SECOND_DELAY);
      delay -= ONE_SECOND_DELAY;
    } while (!pageLoadState.equals("complete") && delay > 0);

    return this;
  }

Хотел бы в заключении отметить, что лучшим способом, по моему мнению и как пока показала практика, является тот, что предложил Алексей Баранцев. Я некоторое время пользовался другим - сравнивал названия страниц, но потом обнаружил, что периодически происходит сбой - видимо название не успевало смениться до проверки getTitle(). Сейчас же переделал это в ожидание одного из двух элементов и, исходя из того что обнаружится, определяю на какой странице нахожусь.

Всем спасибо за участие, особенно Алексею, узнал много нового :blush: