我可以让Behat/ZombieJS/Mink模拟点击"非链接"元素,以解雇JS听众吗?

K. *_*ert 6 zombie.js behat mink

我正在使用Behat进行测试,使用ZombieJS驱动程序,到目前为止一切都运行良好,但有一件事困扰我,我似乎无法弄清楚如何让Behat模拟非点击链接元素.我想这来自Mink是一个"跨浏览器"的驱动程序,单击非链接元素并没有多大意义.对于我的用例,我需要它,因为页面上有几个元素附加了javascript事件监听器,我想测试这些功能.

我试过用

Then I follow "div.sa"
Run Code Online (Sandbox Code Playgroud)

但它失败了预期的错误:

01. Link with id|title|alt|text "div.sa" not found.
Run Code Online (Sandbox Code Playgroud)

因为它不是链接元素.Behat中有类似的步骤:

我按"button.class"

但这只适用于按钮.

有没有办法让Behat点击不是标签的元素?

Com*_*tar 12

有一些错误处理:

/** 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();
}
Run Code Online (Sandbox Code Playgroud)


Dav*_*all 4

是的,我相信是这样,但是您需要编写一个自定义步骤,类似于这些内容(如果您使用的是MinkContext.

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