如何在 behat3 中使用 xpath 和 class 单击嵌套 div 下的按钮

how to click a button under a nested div using xpath and class in behat3

我有一个嵌套的 div 结构,其中有一个按钮元素。我想通过 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)

XPath 错误,而且您的参数必须是按钮文本,而不是按钮的 ID。

你的 xpath 应该是:

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

而你的黄瓜步骤应该是:

And I click on button "Submit"

正如您所定义的那样效率不高,您正在定义一个包含仅匹配一个按钮的参数的步骤(因为您的 xpath 基于该部分的 ID)或最多 2 个按钮(如果您有取消选项) .

最好说 I submit the form 没有参数。

如果你想要一个通用步骤,你需要从 xpath 中删除 id

For general button click better use the step that is already defined in mink

I press "button_identifier" that works with id|name|title|alt|value

除此之外,对于您的自定义步骤,您需要处理异常,特别是致命异常,例如您的情况,致命异常 => 套件结束。

您必须等待元素并确保存在,然后再对其执行一些操作。