如何在 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
除此之外,对于您的自定义步骤,您需要处理异常,特别是致命异常,例如您的情况,致命异常 => 套件结束。
您必须等待元素并确保存在,然后再对其执行一些操作。
我有一个嵌套的 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 withid|name|title|alt|value
除此之外,对于您的自定义步骤,您需要处理异常,特别是致命异常,例如您的情况,致命异常 => 套件结束。
您必须等待元素并确保存在,然后再对其执行一些操作。