Управление React DOM с Serenity BDD Сценарий - PullRequest
0 голосов
/ 05 марта 2020

Добрый вечер, сообщество. Я хотел бы получить комментарии или помощь о том, как автоматизировать приложение REACT со спокойствием BDD и сценарием. В основном, проблема у меня заключается в следующем: у меня есть форма регистрации, разделенная на этапы, в соответствии с этапом, на котором отображается представление, например, на этапе 1 вы вводите почту и подтверждение, на следующем этапе вы вводите имена и фамилии и т.д. до тех пор, пока вы не завершите sh регистрацию.

Как я делаю процесс: была сгенерирована задача, которая содержит все шаги реестра, это работает очень хорошо, если все шаги выполняются в одной задаче , но когда я хочу отделить каждый шаг в новой реализации, при выполнении процесса первый шаг (подтверждение и почта) выполняется нормально, но следующее (имена и фамилии) не может найти элементы, процесс ищет идентификаторы электронной почты и пароля.

Я предполагаю, что это из-за виртуального DOM, который обрабатывает REACT. Я все еще не могу найти ответ, как обработать текущий контекст и заставить процесс найти текущие элементы в DOM.

@Step("{0} fill the what's your name step")
@Override
public <T extends Actor> void performAs(T actor) {
    actor.attemptsTo(
        Refresh.theBrowserSession(),
        JavaScriptClick.on(TXT_FIRST_NAME),
        Click.on(TXT_FIRST_NAME),
        Enter.theValue(firstName).into(TXT_FIRST_NAME),
        Click.on(TXT_LAST_NAME),
        Enter.theValue(lastName).into(TXT_LAST_NAME),
        Click.on(BTN_CONTINUE_NAME),
        Click.on(TXT_BIRTHDAY),
        Enter.theValue("06/08/1989").into(TXT_BIRTHDAY),
        Click.on(BTN_CONTINUE_BIRTHDAY),
        Click.on(RADIO_GENDER),
        Click.on(BTN_CONTINUE_GENDER)
    );
}

Ссылка в классе определения шага.

@And("^I fill the (.*) and confirmation email step$")
public void iFillTheEmailAndConfirmationEmailStep(String email) {
    email = faker.internet().emailAddress();
    theActorInTheSpotlight().attemptsTo(Registration.with(email));
    String saveEmail = String.valueOf(TXT_EMAIL.resolveFor(theActorInTheSpotlight()).getText());
    theActorInTheSpotlight().remember("email", saveEmail);
    String emailConfirmation = theActorInTheSpotlight().recall("email");
    theActorInTheSpotlight().attemptsTo(Registration.with(emailConfirmation));
}

@And("^I fill the step whats your name with (.*) and (.*)$")
public void iFillTheStepWhatsYourNameWithFirstNameAndLastName(String firstName, String lastName) {
    firstName = faker.name().firstName();
    lastName = faker.name().lastName();
    theActorInTheSpotlight().attemptsTo(EnterText.name(firstName, lastName));
}

Это ошибка, которую выдает консоль

[Test worker] ERROR net.thucydides.core.steps.ConsoleLoggingListener - TEST FAILED AT STEP And I fill the email and confirmation email step
    [Test worker] ERROR net.thucydides.core.steps.ConsoleLoggingListener - no such element: Unable to locate element: {"method":"css selector","selector":"*[name='email']"}

    no such element: Unable to locate element: {"method":"css selector","selector":"*[name='email']"}
      (Session info: chrome=80.0.3987.122)
    For documentation on this error, please visit: https://www.seleniumhq.org/exceptions/no_such_element.html

1 Ответ

0 голосов
/ 05 марта 2020

Это сообщение об ошибке ...

no such element: Unable to locate element: {"method":"css selector","selector":"*[name='email']"}

... означает, что в стратегии Locator , которую вы использовали, возникла проблема.


*[name='email'] не является допустимым . Вам необходимо удалить звездочку, т.е. *, чтобы сделать ее действительным css селектором . Таким образом, вы должны использовать:

  • cssSelector :

    [name='email']
    
  • xpath :

    //*[@name='email']
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...