试图将一些文本发送到该字段

时间:2013-01-07 17:25:42

标签: behat mink

我尝试使用此功能向该字段发送一些文本:

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();
    }

3 个答案:

答案 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();
}