2017-08-23 7 views
0

DataTableの「検索」を見つけるために:私は、持っているテストBehat既存問題は、jQueryのことで、ページ内に注入される入力は、次のHTMLは、<a href="https://datatables.net/" rel="nofollow noreferrer">jQuery Datatables plugin</a>によってページに挿入されたプラグイン

<label>Search: 
    <input type="search" class="" placeholder="" aria-controls="datatable-1"> 
</label> 

ました合格しないであろう。

Given I am on "/courses" 
And I fill in "Search" with "course" 

を生じたエラーである:

Form field with id|name|label|value|placeholder "Search" not found. 

I H AVEは、以下を試してみました:

  1. 待機When I wait for "[type='search']"(60秒でタイムアウト)
のバリエーションを追加ウェイト When I wait for "Search:" to appearの変動(60秒でタイムアウト)
  • 追加And I fill in "Search:" with "course"
  • And更新します

    このシナリオではFirefoxが開き、「検索:」というラベルと検索ボックスが表示されます。

    このテストに合格するには、何が必要ですか?

  • +0

    私はそれを解決する準備ができていませんが、クロームドライバに切り替えて、「待つときは」検索:「表示されます」が機能します。 –

    +0

    あなたは 'のような属性' search 'を使って試してみることができます。そして、 "search"を "course"で埋めます。これが機能しない場合は、セレクタに基づいた塗りつぶしのカスタムステップを実装する必要があります。 – lauda

    答えて

    0

    BehatのI fill in "field" with "value"コマンドが遅いです。私はこのような理由でこれを使用しない傾向があります。

    この場合、ラベルテキストの周囲の空白のために、ラベルマッチングが機能していない可能性があります。正確なテキストマッチを期待していますが、追加の空白がそれを投げています。

    は、次のようなもので、この機能を使用して回避できます

    $this->getSession()->getPage()->find('css', 'input[type=search]')->setValue('course'); 
    

    ページのロード時要素が使用できない場合、あなたはそれを待つ必要があります。ラベルテキストがタイムアウトするのを待つことに言及しているので、興味のある要素がiframe内にあるかどうかを確認する必要があります。この場合、セレントがiframe内の要素と対話する前に、switchToIFrameコマンドを使用する必要があります。例えば

    //Switch to iframe with id 'iframeID' 
    $this->getSession()->switchToIFrame('iframeID'); 
    
    //Do some stuff with the elements contained in the iframe. 
    
    //Switch back to parent iframe. 
    $this->getSession()->switchToIFrame(null); 
    

    もう一つは、注意すべきは、アイフレームの階層がある場合、あなたは一度に一つのレベルを切り替える必要があるということです。

    関連する問題