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()); }