我正在使用Behat来测试注册页面 此页面包含一些具有自动完成功能的字段。 用户在字段中填写一些值,页面等待500毫秒,发出ajax请求并显示一些选项以及相关消息(未找到任何项目/找到多个项目/找到一个项目。)
我正在使用预定义步骤“我用值填写字段”(尝试使用“我填写值 < em> field “而不是” 下一步是自定义的,类似于documentation中描述的步骤 - 我只是等待消息出现并检查它是否有正确的文本。
但是在填充场后,Mink会从中移除焦点,导致 blur 事件在场上被触发。
Jquery-ui清除字段值以响应此 blur 事件,因此在500毫秒字段为空并且ajax请求被中止后。
如何解决此问题?
Behat v2.5.0
水貂v1.5.0
水貂延伸v1.3.3
Jquery-ui v1.8.21
Selenium v2.44.0
答案 0 :(得分:0)
下面的解决方案特定于我的标记代码,但应该很容易适应您的。您可能需要修改它。
假设在文本框中选择自动建议选项。用户的击键后,自我提示选项显示为<li>
个元素。 <li>
元素出现在页面中,但其内容在开头是空的,因此behat没有任何内容可供选择。要解决此问题,<li>
标记之间的现有内容将包含<label>
标记。
此自动建议字段中的用户类型:
<input name="brand" type="text" />
自动提示数据出现的地方:
<ul>
<li><label>{{ suggestion }}</label></li>
</ul>
<强>小黄瓜:强>
When I fill in "brand" with "S"
And I wait 1 seconds
Then I select autosuggestion option "Sula"
And I wait 1 seconds
......
<强> FeatureContext:强>
/**
* @Given /^I wait (\d+) seconds$/
*/
public function iWaitSeconds($seconds)
{
sleep($seconds);
}
/**
* @Then /^I select autosuggestion option "([^"]*)"$/
*
* @param $text Option to be selected from autosuggestion
* @throws \InvalidArgumentException
*/
public function selectAutosuggestionOption($text)
{
$session = $this->getSession();
$element = $session->getPage()->find(
'xpath',
$session->getSelectorsHandler()->selectorToXpath('xpath', '*//*[text()="'. $text .'"]')
);
if (null === $element) {
throw new \InvalidArgumentException(sprintf('Cannot find text: "%s"', $text));
}
$element->click();
}
答案 1 :(得分:0)
@Scenario: I'm stuck
Given I use jquery-ui-autocomplete
And I can not test it with behat
Then I trigger keyDown event like this:
"""
/**
* @When I select :entry after filling :value in :field
*/
public function iFillInSelectInputWithAndSelect($entry, $value, $field)
{
$page = $this->getSession()->getPage();
$field = $this->fixStepArgument($field);
$value = $this->fixStepArgument($value);
$page->fillField($field, $value);
$element = $page->findField($field);
$this->getSession()->getDriver()->keyDown($element->getXpath(), '', null);
$this->getSession()->wait(500);
$chosenResults = $page->findAll('css', '.ui-autocomplete a');
foreach ($chosenResults as $result) {
if ($result->getText() == $entry) {
$result->click();
return;
}
}
throw new \Exception(sprintf('Value "%s" not found', $entry));
}
"""
答案 2 :(得分:0)
使用它来填写搜索框:(使用ID选择器)
/**
* @Then I type :text into search box
*/
public function iTypeTextIntoSearchBox($text)
{
$element = $this->getSession()->getPage()->findById('searchInput');
$script = "$('#searchInput').keypress();";
$element->setValue($text);
$this->getSession()->evaluateScript($script);
}