Help us understand the problem. What is going on with this article?

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

More than 5 years have 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 に目を通しておいて損はないかも。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away