コード例 #1
0
 /**
  * Perform actual decoration.
  *
  * @param Property        $property The property that may be decorated.
  * @param IElementLocator $locator  Locator.
  *
  * @return IProxy|null
  */
 protected function doDecorate(Property $property, IElementLocator $locator)
 {
     $proxy_class = $this->getProxyClass($property);
     if (!$proxy_class) {
         return null;
     }
     /* @var $proxy IProxy */
     $proxy = new $proxy_class($locator, $this->pageFactory, $this->getElementName($property));
     $proxy->setClassName($property->getDataType());
     $proxy->setContainer($locator->getSearchContext());
     return $proxy;
 }
コード例 #2
0
 /**
  * Locates elements using the locator.
  *
  * @return NodeElement[]
  * @throws ElementNotFoundException When element wasn't found on the page.
  */
 protected function locateElements()
 {
     $elements = $this->locator->findAll();
     if (empty($elements)) {
         throw new ElementNotFoundException('No elements found by selector: ' . (string) $this->locator);
     }
     return $elements;
 }
コード例 #3
0
 /**
  * @return WebElementProxy
  * @dataProvider proxyDataProvider
  */
 public function testProxyWebElement($element_class, $proxy_class)
 {
     $search_context = m::mock('\\aik099\\QATools\\PageObject\\ISearchContext');
     $this->locator->shouldReceive('getSearchContext')->andReturn($search_context);
     $node_element = $this->createNodeElement();
     $this->locator->shouldReceive('findAll')->andReturn(array($node_element));
     $this->property->shouldReceive('isSimpleDataType')->andReturn(false);
     $this->property->shouldReceive('getDataType')->andReturn($element_class);
     $proxy = $this->decorator->decorate($this->property);
     $this->assertProxy($proxy, $proxy_class, $search_context, $element_class);
     $this->assertEquals($node_element->getXpath(), $proxy->getXpath());
     return $proxy;
 }
コード例 #4
0
 /**
  * Verifies, that annotations are being correctly used.
  *
  * @param array           $annotations Annotations.
  * @param IElementLocator $locator     Locator.
  *
  * @return void
  * @throws AnnotationException When annotation is being used incorrectly.
  */
 private function _assertAnnotationUsage(array $annotations, IElementLocator $locator)
 {
     if (!$annotations) {
         throw new AnnotationException('BEM block/element must be specified as annotation', AnnotationException::TYPE_REQUIRED);
     }
     /** @var BEMAnnotation $annotation */
     $annotation = $annotations[0];
     if ($annotation->element && $annotation->block || !$annotation->element && !$annotation->block) {
         throw new AnnotationException("Either 'block' or 'element' key with non-empty value must be specified in the annotation", AnnotationException::TYPE_INCORRECT_USAGE);
     } elseif ($annotation->element && !$locator->getSearchContext() instanceof IBlock) {
         throw new AnnotationException('BEM element can only be used in Block sub-class (or any class, implementing IBlock interface) property', AnnotationException::TYPE_INCORRECT_USAGE);
     } elseif ($annotation->block && !$locator->getSearchContext() instanceof BEMPage) {
         throw new AnnotationException('BEM block can only be used in BEMPage sub-class property', AnnotationException::TYPE_INCORRECT_USAGE);
     }
 }