예제 #1
0
 /**
  * @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;
 }
예제 #2
0
 /**
  * @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");
 }
예제 #3
0
 public function grabTextFrom($cssOrXPathOrRegex)
 {
     $el = null;
     if (Locator::isCSS($cssOrXPathOrRegex)) {
         $el = $this->session->getPage()->find('css', $cssOrXPathOrRegex);
         if ($el) {
             return $el->getText();
         }
     }
     if (!$el and Locator::isXPath($cssOrXPathOrRegex)) {
         $el = @$this->session->getPage()->find('xpath', $cssOrXPathOrRegex);
         if ($el) {
             return $el->getText();
         }
     }
     if (@preg_match($cssOrXPathOrRegex, $this->session->getPage()->getContent(), $matches)) {
         return $matches[1];
     }
     throw new ElementNotFound($cssOrXPathOrRegex, 'CSS or XPath or Regex');
 }
예제 #4
0
 /**
  * @param $locator
  * @return Crawler
  */
 protected function filterByCSS($locator)
 {
     if (!Locator::isCSS($locator)) {
         throw new MalformedLocatorException($locator, 'css');
     }
     return $this->getCrawler()->filter($locator);
 }
예제 #5
0
 /**
  * @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;
 }
예제 #6
0
 /**
  * @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;
 }