Can I make Behat/ZombieJS/Mink simulate a click on a “non-link” element, to fire JS listeners?

前端 未结 4 606
时光取名叫无心
时光取名叫无心 2021-01-12 18:34

I am using Behat for testing, with the ZombieJS driver, and everything is working very well so far, but there is one thing that bothers me, I can\'t seem to figure out how t

相关标签:
4条回答
  • 2021-01-12 18:53

    Yes I believe so, but you'll need to write a custom step, something along these lines (if you're using a subclass of MinkContext.

    /**
     * @When /^I click the something$/
     */
    public function iClickTheSomething() 
    {
        $something = $this->getSession()
                          ->getPage()
                          ->find("css", "div.sa")
                          ->click();
    }
    
    0 讨论(0)
  • 2021-01-12 19:02

    With some error handling:

    /** 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();
    }
    
    0 讨论(0)
  • 2021-01-12 19:02

    When I execute a click event, so that the current URL be equal to javascript:

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

    In the page html:

    <a onclick="editForm('Avatar')" href="javascript:;">Modifier</a>
    
    0 讨论(0)
  • 2021-01-12 19:07

    This is my adaptation of the answer by Comstar. The same functionality is achieved, however, it seems simpler to me to do it this way.

    /**
     * @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();
        }
    
    }
    
    0 讨论(0)
提交回复
热议问题