我正在尝试选择一个包含文本框的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');
}
我不确定我在这里做错了什么。我一直得到'类NodeElement的对象无法转换为字符串'错误。
答案 0 :(得分:1)
fillField()
接受两个论点:
find()
方法返回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选择器放入您的方案中,您可以使用技术细节来污染它们。如果您更喜欢遵循这种做法,最好不要直接使用水貂而不使用Behat(因为您并没有真正进行验收测试,而只是进行功能测试)。