public function testSet()
 {
     $browser = $this->getBrowser();
     $browser->open($this->getUrl('cookies.php'));
     $browser->getCookies()->set('foo', 'bar');
     $browser->refresh();
     $this->assertEquals('bar', $browser->element(By::css('td[data-cookie="foo"]'))->getText());
 }
 public function testElementMoveTo()
 {
     $browser = $this->getBrowser();
     $browser->open($this->getUrl('mouse.php'));
     $this->assertNotContains('You see this text because of hover', $browser->getText());
     $browser->element(By::css('h1'))->moveTo();
     $browser->element(By::css('.hover-wrapper .title'))->moveTo();
     $this->assertContains('You see this text because of hover', $browser->getText());
 }
 public function testCollection()
 {
     $browser = $this->getBrowser(true)->open($this->getUrl('index.php'));
     $count = count($browser->getWindows()->getAll());
     $browser->element(By::linkText('Pop-up'))->click();
     $this->assertCount($count + 1, $all = $browser->getWindows()->getAll());
     $browser->element(By::linkText('Another page'))->click();
     $orig = $browser->getWindows()->getCurrent();
     $other = array_values(array_diff($all, array($orig)))[0];
     $browser->getWindows()->focus($other);
     $this->assertContains('Welcome to sample website', $browser->getText());
     $browser->getWindows()->closeCurrent();
     $browser->getWindows()->focus($orig);
     $this->assertContains('You know... some other page', $browser->getText());
     $browser->close();
 }
 protected function getContextualActions($textFilter = null)
 {
     return $this->getElements(By::xpath('//div[contains(@class, "sub-actions")]//a[contains(.,"' . $textFilter . '")]'));
 }
 public function testEquals()
 {
     $browser = $this->getBrowser()->open($this->getUrl('index.php'));
     $a = $browser->element(By::id('danger-zone'));
     $b = $browser->element(By::css('#danger-zone'));
     $c = $browser->element(By::id('hidden-element'));
     $this->assertTrue($a->equals($a));
     $this->assertTrue($a->equals($b));
     $this->assertTrue($b->equals($a));
     $this->assertFalse($a->equals($c));
     $this->assertFalse($c->equals($a));
 }
 /**
  * @Then /^I fill "((?:[^"]|"")*)" with "((?:[^"]|"")*)"$/
  */
 public function iFillWith($field, $value)
 {
     $field = $this->unescape($field);
     $value = $this->unescape($value);
     $selector = $this->parseSelector($field);
     if (is_string($selector)) {
         $selector = By::xpath(strtr(self::LABEL_TO_INPUT_XPATH, array('{text}' => Xpath::quote($field))));
     }
     $field = $this->tryRepeating(function () use($selector) {
         return $this->getElement($selector);
     });
     if ($field->getTagName() == 'select') {
         $field->element(By::xpath('.//option[contains(., ' . Xpath::quote($value) . ')]'))->click();
         return;
     }
     $type = $field->getAttribute('type');
     if ($type === 'checkbox') {
         $value = $value === '1' || $value === 'on' || $value === 'true';
         $selected = $field->isSelected();
         if ($value !== $selected) {
             $field->click();
         }
         return;
     }
     if ($type === 'radio') {
         $value = $value === '1' || $value === 'on' || $value === 'true';
         $selected = $field->isSelected();
         if ($selected && !$value) {
             throw new \RuntimeException(sprintf('Cannot uncheck a radio (a user in a web browser can\'t neither'));
         }
         $field->click();
         return;
     }
     // text or textarea
     $field->clear();
     $field->type($value);
 }
 /**
  * Converts a text selector to a By object.
  *
  * Tries to find magic expressions (css=#foo, xpath=//div[@id="foo"], id=foo, name=q, class=active).
  *
  * @return By|string returns a By instance when magic matched, the string otherwise
  */
 protected function parseSelector($text)
 {
     if (0 === strpos($text, 'id=')) {
         return By::id(substr($text, 3));
     }
     if (0 === strpos($text, 'xpath=')) {
         return By::xpath(substr($text, 6));
     }
     if (0 === strpos($text, 'css=')) {
         return By::css(substr($text, 4));
     }
     if (0 === strpos($text, 'name=')) {
         return By::name(substr($text, 5));
     }
     if (0 === strpos($text, 'class=')) {
         return By::className(substr($text, 6));
     }
     return $text;
 }
    public function testIFill()
    {
        $ctx = $this->getContext($browser = $this->getBrowser());
        $browser->open($this->getUrl('form.php'));
        // Fill EVERYTHING é/
        $table = new TableNode(<<<TABLE
| A text field | some value |
| A checkbox | 1 |
| Radio #1 | 1 |
| Select | foo label |
TABLE
);
        $ctx->iFill($table);
        $browser->element(By::id('submit'))->click();
        $text = $browser->getText();
        $this->assertContains('Text field: some value', $text);
        $this->assertContains('Checkbox is checked', $text);
        $this->assertContains('Radio: 1', $text);
        $this->assertContains('Select: foo', $text);
        // check, verify, uncheck, verify
        $table = new TableNode('| A checkbox | 1 |');
        $ctx->iFill($table);
        $this->assertTrue($browser->element(By::id('checkbox'))->isSelected());
        $table = new TableNode('| A checkbox | 0 |');
        $ctx->iFill($table);
        $this->assertFalse($browser->element(By::id('checkbox'))->isSelected());
        // address a field by ID
        $browser->open($this->getUrl('form.php'));
        $ctx->iFill(new TableNode('| id=checkbox | 1 |'));
        $this->assertTrue($browser->element(By::id('checkbox'))->isSelected());
    }
 /**
  * Method to select elements, usinga sleector (css, xpath, etc.).
  *
  * @param By $by Indicates how to search for elements
  *
  * @return array An array of elements
  */
 public function elements(By $by, $from = null)
 {
     if (null === $from) {
         $uri = 'elements';
     } else {
         $uri = 'element/' . $from->getId() . '/elements';
     }
     $response = $this->request('POST', $uri, json_encode($by->toArray()));
     $data = json_decode($response->getContent(), true);
     if (!isset($data['value'])) {
         throw new LibraryException('Missing key value');
     }
     $elements = array();
     foreach ($data['value'] as $val) {
         $elements[] = new Element($this, $val['ELEMENT']);
     }
     return $elements;
 }
 public function testDismissAlert()
 {
     $browser = $this->getBrowser();
     $browser->open($this->getUrl('alert.php'));
     $browser->element(By::id('alert'))->click();
     $browser->dismissAlert();
     $this->assertContains('alerted', $browser->getText());
     $browser->element(By::id('confirm'))->click();
     $browser->dismissAlert();
     $this->assertContains('dismissed', $browser->getText());
 }