2012-11-13 5 views
5

私は、ZombieJSドライバを使用して、テストにBehatを使用していますが、これまでのところすべてがうまくいきましたが、悩ましいことが1つあります。私はBehatにクリックをシミュレートする方法を見つけることができません。非リンク要素。私はこれがMinkが "クロスブラウザ"ドライバであることに由来し、リンク以外の要素をクリックするのは実際には意味がないと思う。私のユースケースでは、ページにjavascriptイベントリスナーが付いている要素がいくつかあり、これらの機能をテストしたいからです。Behat/ZombieJS/Minkは、JSリスナーを起動するために「非リンク」要素のクリックをシミュレートすることはできますか?

私は

Then I follow "div.sa" 

を使用してみました。しかし、それは予想されるエラーで失敗します。それはlink要素ではありませんので

01. Link with id|title|alt|text "div.sa" not found. 

。私は押し

「button.class」

しかし、この1はボタンのみのためである:ありBehatにおける同様の工程です。

タグではない要素をBehatがクリックする方法はありますか?

答えて

4

はい、私はそう信じていますが、あなたはMinkContextのサブクラスを使用している場合は、カスタムステップ、これらの線に沿って何かを(書く必要があります

/** 
* @When /^I click the something$/ 
*/ 
public function iClickTheSomething() 
{ 
    $something = $this->getSession() 
         ->getPage() 
         ->find("css", "div.sa") 
         ->click(); 
} 
12

いくつかのエラー処理で:。

現在のURLはJavaScriptに等しくなるように、私は、クリックイベントを実行
/** Click on the element with the provided xpath query 
* 
* @When /^(?:|I)click on the element "([^"]*)"$/ 
*/ 
public function iClickOnTheElement($locator) 
{ 
    $session = $this->getSession(); // get the mink session 
    $element = $session->getPage()->find('css', $locator); // runs the actual query and returns the element 

    // errors must not pass silently 
    if (null === $element) { 
     throw new \InvalidArgumentException(sprintf('Could not evaluate CSS selector: "%s"', $locator)); 
    } 

    // ok, let's click on it 
    $element->click(); 
} 
1

$this->iClickOnTheElementWithXPath(‘//div[@class="'.$arg2.'"]/div/div[@class="edit"]/a[text()="'.$arg1.'"]‘); 

ページ内html:

<a onclick="editForm('Avatar')" href="javascript:;">Modifier</a> 
2

これはComstarの回答の私の適応です。同じ機能が達成されますが、このようにするのは簡単です。

/** 
* @Then /^I click on "([^"]*)"$/ 
*/ 
public function iClickOn($arg1) 
{ 
    $page = $this->getSession()->getPage(); 

    $findName = $page->find("css", $arg1); 
    if (!$findName){ 
     throw new Exception($arg1." could not be found"); 
    } 
    else { 
     $findName->click(); 
    } 

} 
関連する問題