1

この関数を使用して、フィールドにテキストを送信しようとしています:

public function iFillInGrizzlistSearchFieldNameOfNewMember2($arg1)
    {
        $page = $this->getSession()->getPage();
       $el = $page->find('css','.grizzlist-quicksearch');
       $el->setText('$arg1');
      }        

しかし、それは機能しません。教えてください、私は何を間違っていますか?


同じクラスの要素がいくつかある場合、2番目の要素をクリックするにはどうすればよいですか

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

デフォルトでは、フレームワークは可能なセレクターのセットを通過します。1 つのステップで複数のことを行うためにグループ化する場合を除き、ステップ定義を明示的に記述する必要はありません。代わりに 2 つの手順を実行するだけです

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を使用することを検討するか、入力の名前属性が一意である場合は、代わりに使用することを検討する必要があります..など..など...

css を使用して物事に集中するには、新しいステップ定義が必要になります。これは、おそらく書く必要のないコードを書くことを意味しますが、場合によっては書く必要があります。

ページ要素を見つけるために本当に 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 に答える