как нажать кнопку под вложенным div, используя xpath и class в behat3 - PullRequest
1 голос
/ 18 июня 2019

У меня есть вложенная структура div с элементом button.Я хочу проверить функциональность щелчка и перенаправить его с помощью тестовых примеров behat, но я не могу проверить его, поскольку появляется ошибка.

HTML-код моей страницы выглядит примерно так -

<div id="divSubmit1">
      <div id="subDivSubmit1">...</div>
      <div class="row  mt-20 ">...</div>
      <div class="row mt-20">
             <div class="col-xs-offset-7 col-xs-5 mt-20 mb-10 text-center">
                 <button class="btn btn-success btn-lg mt-20" type="submit" name="cmd_btn_submit" onclick="return check_input()">Submit
                     <span class="btn-icon"><i class="fas fa-chevron-right"></i></span></button>
             </div>
        </div>
</div>

Попробовал следующее

Это мой шаг в файле функций

And I click on button "cmd_btn_submit"

, а в моем файле контекста есть

     * @And I click on button :arg1
     * @Then I click on button :arg1
     */
    public function iClickOnButton($arg1)
    {
       $this->getSession()->getPage()->find("xpath", "//button[div[@id='divSubmit1'][contains(text(),'".$arg1."')]]
")->click();

}

Получение этой ошибки,

And I click on button "cmd_btn_submit"                                                                                   # Shop\Features\Context\FeatureContext::iClickOnButton()
      Fatal error: Call to a member function click() on null (Behat\Testwork\Call\Exception\FatalThrowableError)

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Поскольку вы определили, что это не очень эффективно, вы определяете шаг с параметром, который будет соответствовать только кнопке (так как ваш xpath основан на идентификаторе раздела) или максимум двум кнопкам, если у вас есть опция отмены.

Лучше сказать I submit the form без параметров.

Если вы хотите сделать общий шаг, вам нужно избавиться от id от xpath.

Для общего нажатия кнопки лучше использовать шаг, который уже определен в норке

I press "button_identifier", который работает с id|name|title|alt|value

Помимо этого, для ваших пользовательских шагов вам нужно обработать исключения, особенно фатальные, как в вашем случае, фатальное исключение => набор заканчивается.

Вам нужно дождаться элемента и убедиться, что он присутствует, а затем выполнить некоторые действия с ним.

0 голосов
/ 18 июня 2019

XPath неверен, плюс ваш аргумент должен быть текстом кнопки, а не Id кнопки.

Ваш xpath должен быть:

"//div[@id='divSubmit1']//button[contains(text(), '$arg1')]"

И ваш шаг огурца должен быть:

And I click on button "Submit"
...