我尝试使用此功能向该字段发送一些文本:
public function iFillInGrizzlistSearchFieldNameOfNewMember2($arg1)
{
$page = $this->getSession()->getPage();
$el = $page->find('css','.grizzlist-quicksearch');
$el->setText('$arg1');
}
但它不起作用。请告诉我,我做错了什么?
如果我有一些相同类的元素,我怎么可以使用
点击其中的第二个function:
public function iDeleteActiveStatusFromSearchCriteria()
{
$page = $this->getSession()->getPage();
$el = $page->find('css','.delete-bt');
$el->click();
}
答案 0 :(得分:2)
以下是我们使用的步骤定义:
/**
* @Given /^I set tinymce "([^"]*)"$/
*/
public function iSetTinymce($arg1) {
$this->getSession()->executeScript("tinymce.get()[0].setContent('" . $arg1 . "');");
}
请注意,tinymce.get()[0]
正在获取页面上的第一个TinyMce实例。
答案 1 :(得分:1)
默认情况下,框架将通过一组可能的选择器。您不必显式编写步骤defs,除非您想将它们分组以便在一个步骤中执行多项操作。只需做两个步骤
When I fill in "grizzlist-quicksearch" with "sometext"
And I press "delete-bt"
这些步骤defs是内置的,因此您无需执行任何其他操作。然而,这不会起作用,因为我在这一步中投入的东西是css。正确的方法是匹配其他东西。
When I fill in "valueOfInputNameAttribute" with "sometext"
And I press "valueOfSubmitButtonNameAttribute"
例如,这里是框架使用的代码,您可以在功能中使用
https://github.com/Behat/MinkExtension/blob/master/src/Behat/MinkExtension/Context/MinkContext.php
查找使用fillField的任何内容
您会注意到它正在使用fillField为您完成工作
如果您深入了解源代码,您会在Mink / Element中的traversableelement.php中找到它
/**
* Fills in field (input, textarea, select) with specified locator.
*
* @param string $locator input id, name or label
* @param string $value value
*
* @throws ElementNotFoundException
*/
public function fillField($locator, $value)
{
$field = $this->findField($locator);
if (null === $field) {
throw new ElementNotFoundException(
$this->getSession(), 'form field', 'id|name|label|value', $locator
);
}
$field->setValue($value);
}
它正在使用定位器,它将尝试使用您在功能中提供的文本来找到输入元素id | name | label | value
所以你应该考虑在你的id属性中使用一个唯一的id,或者如果输入上的你的名字属性是唯一的,那就用它来代替......等等......
为了让你专注于使用css的东西,需要一个新的步骤def,这意味着编写你可能不需要编写的代码,但有时候你必须这样做。
如果你真的只限于使用css来查找你的页面元素,那么在你的FeatureContext中使用这样的自定义步骤
/**
* @When /^I fill in the quicksearch with "([^"]*)"$/
*/
public function iFillInTheQuickSearchWith($value)
{
$element = $session->getPage()->find('css', 'INPUT#grizzlist-quicksearch');
$element->setValue($value);
}
希望有助于您入门。当你开始时,理解BDD框架可能会很困难。
答案 2 :(得分:0)
将文本输入到behat中的定位器
public function inputValue($name)
{
$searchField = $this->findField($locatorOfInput);
$searchField = $searchField->setValue($name);
}
Js始终是一种选择:) 使用js将文本输入到behat中的定位器中
public function inputValue($name)
{
$this->getDriver()->executeScript("$('$searchFieldLocator').val('".$name ."')";
}
获取相同类元素的父定位器
public function deleteSecondElement()
{
$status= $this->findAll('css', $locator);
$status= $status[1]->click();
}