1

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

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

3 回答 3

3

这是我们正在使用的步骤定义:

/** * @Given /^I set tinymce "([^"]*)"$/ */ public function iSetTinymce($arg1) { $this->getSession()->executeScript("tinymce.get()[0].setContent('" . $arg1 . "');"); }

请注意,这tinymce.get()[0]是获取页面上的第一个 TinyMce 实例。

于 2014-04-29T12:15:18.600 回答
1

默认情况下,框架将通过一组可能的选择器。您不必显式编写步骤定义,除非您想将它们分组以在一个步骤中执行多项操作。只需执行两个步骤

When I fill in "grizzlist-quicksearch" with "sometext"
And I press "delete-bt"

这些步骤定义是内置的,因此您无需执行任何其他操作。但是这行不通,因为我在这一步中放入的东西是 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,或者如果您在输入中的 name 属性是唯一的,请使用它来代替.. 等等.. 等等...

为了让你专注于使用 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 框架可能会很困难。

于 2013-01-08T05:29:31.970 回答
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();
}
于 2018-10-29T12:43:30.147 回答