Selenium Java Test ждет завершения перенаправления - PullRequest
0 голосов
/ 07 мая 2018

Предположим, я хотел протестировать свою функциональность LoginPage.Поэтому, если я введу правильное имя пользователя и пароль, я буду перенаправлен в welcomepage.jsp.

Я использовал управляемую контейнером безопасность, поэтому есть некоторая j_security_check, которую вы увидите в URL.

Feature: MyApp Login Feature
  Validate MyApp Login Features

  Scenario Outline: User logs to MyApp
    Given I navigate to MyApp login page
    And I enter <username> and <password>
    And I click on login button
    Then user entered correct username and password then they should be redirected to the proper <url>

    Examples: 
      | username     | password              | url                  |
      | correctuser  | correctpassword       | welcome.jsp          |

Моя проблема в том, как обработать редирект 302.Если я посмотрел на вкладку «Моя сеть» в своем браузере, я вижу следующую последовательность

  1. POST j_security_check
  2. GET welcome.jsp

    @Then("^Then user entered correct username and password then they should be redirected to the proper ([^\"]*)$")
    public void user_should_be_redirected_to_the_proper(String expectedURL) throws Throwable {
        System.out.println("expectedURL :: " + expectedURL );
        if (driver.getCurrentUrl().contains(expectedURL)) {
            System.out.println("MyApp Test Pass");
        } else {
            System.out.println("MyApp Test Failed");
            Assert.fail("MyApp Test failed!");
        }
    }
    

Я видел здесь некоторые вопросы, которые задают об этом, например JavaScript Executor в Selenium WebDriver

Но я думаю, что это не AJAX-вызов, в котором мы ждем DOM Ready

Ответы [ 3 ]

0 голосов
/ 08 мая 2018

@ Ответ Кузнечика был в правильном направлении, что вам нужно, чтобы вызвать WebDriverWait несоответствие с Ожидаемые условия . Но, как вы бы утверждали getCurrentUrl() с expectedURL вместо urlMatches , urlContains или urlToBe , вам необходимо использовать titleContains() метод, передающий аргумент Заголовок страницы окончательного url . ExpectedConditions titleContains(), который будет возвращать true, когда заголовок соответствует вашему заголовку приложения . Этот inturn обеспечит вам установку окончательного url . Вы можете использовать следующий блок кода, где я предположил, что окончательный url заканчивается welcome.jsp будет иметь заголовок страницы как Добро пожаловать - Марк Эстрада - Домашняя страница :

import org.openqa.selenium.support.ui.WebDriverWait;
import org.openqa.selenium.support.ui.ExpectedConditions;
// other lines of code
@Then("^Then user entered correct username and password then they should be redirected to the proper ([^\"]*)$")
public void user_should_be_redirected_to_the_proper(String expectedURL) throws Throwable 
{
    new WebDriverWait(driver, 20).until(ExpectedConditions.titleContains("Welcome - Mark Estrada - Home Page"));
    System.out.println("expectedURL :: " + expectedURL );
    if (driver.getCurrentUrl().contains(expectedURL)) {
    System.out.println("MyApp Test Pass");
    } else {
    System.out.println("MyApp Test Failed");
    Assert.fail("MyApp Test failed!");
    }
}
0 голосов
/ 08 мая 2018

Вы можете подождать, пока URL не содержит или не соответствует какой-либо строке:

import org.openqa.selenium.support.ui.ExpectedConditions;

WebDriverWait wait5s = new WebDriverWait(driver,5);
wait5s.until(ExpectedConditions.urlContains("welcome.jsp"));

Чтобы дождаться загрузки DOM, лучше дождаться нажатия на элемент:

wait5s.until(ExpectedConditions.elementToBeClickable(locator);

или опционально:

wait5s.until(ExpectedConditions.attributeToBe(locator, attribute, value);

В сценарии с неверными учетными данными просто наберите if/else.

0 голосов
/ 07 мая 2018

Попробуйте использовать один из этих ExpectedConditions, urlMatches , urlContains , urlToBe до того, как утверждения будут ждать завершения перенаправления.

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