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

时间:2019-06-18 11:29:41

标签: php selenium laravel-5 behat mink

我有一个嵌套的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)

2 个答案:

答案 0 :(得分:0)

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

您的xpath应该是:

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

您的黄瓜步骤应该是:

And I click on button "Submit"

答案 1 :(得分:0)

由于您定义的效率不是很高,因此您正在定义一个参数仅与按钮匹配的步骤(因为您的xpath基于该部分的ID),或者如果有取消选项,则最多两个按钮。 / p>

最好说I submit the form,不要使用参数。

如果要执行一般步骤,则需要从xpath中删除id

  

对于常规按钮单击,最好使用貂皮中已定义的步骤

     

I press "button_identifier"id|name|title|alt|value一起使用

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

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