Behat 使用 Mink 扩展和 selenium2 来自动化测试用例
Behat with Mink extension and selenium2 to automate a test case
我正在尝试 select 一个内部有文本框的 iFrame。这是页面的结构:
<html>
<body>
<many text fields>
<iframe>
#document
<html>
<body>
<p>
WRITE TEXT HERE;
</p>
</body>
</html>
</iframe>
<more tags to do other things>
</body>
</html>
这是我在标签内的
标签中访问和写入文本的函数:
// Select iFrame
/**
*
*
* @Given /^I switch to iframe "([^"]*)"$/
*/
public function iSwitchToIframe($field1)
{
$field1 = $this->fixStepArgument($field1);
$page = $this->getSession()->getPage();
$el = $page->find('css', $field1);
$this->fillField($el, 'This is field value');
}
我不确定我在这里做错了什么。我不断收到 'Object of class NodeElement could not be converted to a string' 错误。
fillField()
接受两个参数:
- 定位器 - 输入 id、名称或标签(字符串)
- 值(字符串)
find()
方法returns一个NodeElement
,所以不能传递给fillField()
。
您可以在场上呼叫setValue()
:
$field1 = $this->fixStepArgument($field1);
$page = $this->getSession()->getPage();
$formElement = $page->find('css', $field1);
if (null === $formElement) {
throw new \LogicException(sprintf('Form field not found: "%s"', $field1));
}
$formElement->setValue('a value');
但是,您似乎要从场景中传递 css 选择器。如果您传递一个有意义的名称,并将其转换为上下文文件中的 css 选择器或 id 会更好:
// you'll need to covert a name that came from the scenario to a selector
// you could also use a label
$selector = $this->convertFieldNameToIdOrNameOrLabel($field1);
$this->fillField($selector, 'This is field value');
通过将 css 选择器放入您的场景中,您正在用技术细节污染它们。如果您更愿意遵循这种做法,最好直接使用 mink 而不使用 Behat(因为您并不是真正在进行验收测试,而只是进行功能测试)。
我正在尝试 select 一个内部有文本框的 iFrame。这是页面的结构:
<html>
<body>
<many text fields>
<iframe>
#document
<html>
<body>
<p>
WRITE TEXT HERE;
</p>
</body>
</html>
</iframe>
<more tags to do other things>
</body>
</html>
这是我在标签内的
标签中访问和写入文本的函数:
// Select iFrame
/**
*
*
* @Given /^I switch to iframe "([^"]*)"$/
*/
public function iSwitchToIframe($field1)
{
$field1 = $this->fixStepArgument($field1);
$page = $this->getSession()->getPage();
$el = $page->find('css', $field1);
$this->fillField($el, 'This is field value');
}
我不确定我在这里做错了什么。我不断收到 'Object of class NodeElement could not be converted to a string' 错误。
fillField()
接受两个参数:
- 定位器 - 输入 id、名称或标签(字符串)
- 值(字符串)
find()
方法returns一个NodeElement
,所以不能传递给fillField()
。
您可以在场上呼叫setValue()
:
$field1 = $this->fixStepArgument($field1);
$page = $this->getSession()->getPage();
$formElement = $page->find('css', $field1);
if (null === $formElement) {
throw new \LogicException(sprintf('Form field not found: "%s"', $field1));
}
$formElement->setValue('a value');
但是,您似乎要从场景中传递 css 选择器。如果您传递一个有意义的名称,并将其转换为上下文文件中的 css 选择器或 id 会更好:
// you'll need to covert a name that came from the scenario to a selector
// you could also use a label
$selector = $this->convertFieldNameToIdOrNameOrLabel($field1);
$this->fillField($selector, 'This is field value');
通过将 css 选择器放入您的场景中,您正在用技术细节污染它们。如果您更愿意遵循这种做法,最好直接使用 mink 而不使用 Behat(因为您并不是真正在进行验收测试,而只是进行功能测试)。