public function testIsId() { $this->assertTrue(Locator::isID('#username')); $this->assertTrue(Locator::isID('#user.name')); $this->assertTrue(Locator::isID('#user-name')); $this->assertFalse(Locator::isID('#user-name .field')); $this->assertFalse(Locator::isID('.field')); $this->assertFalse(Locator::isID('hello')); }
/** * @param $page * @param $selector * @param bool $throwMalformed * @return array */ protected function match($page, $selector, $throwMalformed = true) { if (is_array($selector)) { try { return $page->findElements($this->getStrictLocator($selector)); } catch (InvalidSelectorException $e) { throw new MalformedLocatorException(key($selector) . ' => ' . reset($selector), "Strict locator"); } } if ($selector instanceof WebDriverBy) { try { return $page->findElements($selector); } catch (InvalidSelectorException $e) { throw new MalformedLocatorException(sprintf("WebDriverBy::%s('%s')", $selector->getMechanism(), $selector->getValue()), 'WebDriver'); } } $isValidLocator = false; $nodes = []; try { if (Locator::isID($selector)) { $isValidLocator = true; $nodes = $page->findElements(WebDriverBy::id(substr($selector, 1))); } if (empty($nodes) and Locator::isCSS($selector)) { $isValidLocator = true; $nodes = $page->findElements(WebDriverBy::cssSelector($selector)); } if (empty($nodes) and Locator::isXPath($selector)) { $isValidLocator = true; $nodes = $page->findElements(WebDriverBy::xpath($selector)); } } catch (InvalidSelectorException $e) { throw new MalformedLocatorException($selector); } if (!$isValidLocator and $throwMalformed) { throw new MalformedLocatorException($selector); } return $nodes; }
/** * @param $selector * @return WebDriverBy * @throws \InvalidArgumentException */ protected function getLocator($selector) { if ($selector instanceof WebDriverBy) { return $selector; } if (is_array($selector)) { return $this->getStrictLocator($selector); } if (Locator::isID($selector)) { return WebDriverBy::id(substr($selector, 1)); } if (Locator::isCSS($selector)) { return WebDriverBy::cssSelector($selector); } if (Locator::isXPath($selector)) { return WebDriverBy::xpath($selector); } throw new \InvalidArgumentException("Only CSS or XPath allowed"); }
/** * @param $page * @param $selector * @return array */ protected function match($page, $selector) { $nodes = array(); if (is_array($selector)) { return $page->findElements($this->getWebDriverLocator($selector)); } if ($selector instanceof \WebDriverBy) { return $page->findElements($selector); } if (Locator::isID($selector)) { $nodes = $page->findElements(\WebDriverBy::id(substr($selector, 1))); } if (!empty($nodes)) { return $nodes; } if (Locator::isCSS($selector)) { $nodes = $page->findElements(\WebDriverBy::cssSelector($selector)); } if (!empty($nodes)) { return $nodes; } if (Locator::isXPath($selector)) { $nodes = $page->findElements(\WebDriverBy::xpath($selector)); } return $nodes; }
/** * @param $page * @param $selector * @return array */ protected function match($page, $selector) { $nodes = array(); if (Locator::isID($selector)) $nodes = $page->findElements(\WebDriverBy::id(substr($selector, 1))); if (!empty($nodes)) return $nodes; if (Locator::isCSS($selector)) $nodes = $page->findElements(\WebDriverBy::cssSelector($selector)); if (!empty($nodes)) return $nodes; if (Locator::isXPath($selector)) $nodes = $page->findElements(\WebDriverBy::xpath($selector)); return $nodes; }