PHP
bdd
Selenium2
behat
Mink

Behat + Mink + Selenium2 で JavaScript動かす時に suggest的なのが取れない!という時の対処法

More than 1 year has passed since last update.

少しハマったのでメモ。

Behat + Mink + Selenium2 で JavaScript動かす時に suggest的なのが取れない!という時の対処法

Behat + Mink + Selenium2 な環境の時、下記の Mink チュートリアル後半でハマりました。

http://docs.behat.org/cookbook/behat_and_mink.html#test-in-browser-selenium2-session

Wiki に検索をした時、サジェストに規定の文字が出てくるのを期待するチュートリアル。

結論

できるだけ、I fill in "hoge" with "fuga" は使わずに、Click や KeyPress を使うようにするべき。

本当は、規定の input を Click してから、KeyPress で必要な文字を入力するべきだと思うのですが、とりあえず、以下のようにするとサジェストは出てくる。

/behat.yml
# behat.yml
default:
  extensions:
    Behat\MinkExtension\Extension:
      base_url: http://en.wikipedia.org
      goutte: ~
      selenium2: ~

/features/search.feature
  @javascript
  Scenario: Searching for a page with auto completion
    Given I am on "/wiki/Main_Page"
    When I fill in "search" with "Behavior Driv"
    And I press " " key into "searchInput"
    And I wait for the suggestion box to appear
    Then I should see "Behavior-driven development"
/features/FeatureContext.php
<?php
class FeatureContext extends MinkContext // MinkContext // BehatContext
{
    /**
     * @Given /^I press "([^"]*)" key into "([^"]*)"$/
     */
    public function iPressKeyInto($key, $id)
    {
        $this->getSession()->getPage()->findById($id)->keyPress($key);
        // throw new PendingException();
    }

    /**
     * @Given /^I wait for the suggestion box to appear$/
     */
    public function iWaitForTheSuggestionBoxToAppear()
    {
        $this->getSession()->wait(5000, "$('.suggestions-results').children().length > 0");
        // throw new PendingException();
    }
}

チュートリアルと違う点

Featureに以下を追加した。

    And I press " " key into "searchInput"

これによって、FeatureContext にもメソッドの追加が必要となった。のが、以下。

    /**
     * @Given /^I press "([^"]*)" key into "([^"]*)"$/
     */
    public function iPressKeyInto($key, $id)
    {
        $this->getSession()->getPage()->findById($id)->keyPress($key);
        // throw new PendingException();
    }

$id の要素に対して、keyPress で " "スペースを入力してみた。


本当は「When I fill in "search" with "Behavior Driv"」のところからして書きなおしたほうが良いのかも。

あと、自戒として。

https://github.com/Behat/MinkSelenium2Driver に目を通しておいて損はないかも。