/** * @return PHPUnit_Extensions_Selenium2TestCase_Element_Select */ public function select(PHPUnit_Extensions_Selenium2TestCase_Element $element) { $tag = $element->name(); if ($tag !== 'select') { throw new InvalidArgumentException("The element is not a `select` tag but a `{$tag}`."); } return PHPUnit_Extensions_Selenium2TestCase_Element_Select::fromElement($element); }
/** * Retrieve relative xpath from context to element * * @param \PHPUnit_Extensions_Selenium2TestCase_Element $element * @param \PHPUnit_Extensions_Selenium2TestCase_Element $context * @param string $path * @param bool $includeLastIndex * @return null */ protected function getRelativeXpath(\PHPUnit_Extensions_Selenium2TestCase_Element $element, \PHPUnit_Extensions_Selenium2TestCase_Element $context, $path = '', $includeLastIndex = true) { if ($element->equals($context)) { return '.' . $path; } $parentLocator = new Locator('..', Locator::SELECTOR_XPATH); $parentElement = $element->element($this->getSearchCriteria($parentLocator)); $childrenLocator = new Locator('*', Locator::SELECTOR_XPATH); $index = 1; $tag = $element->name(); if (!$includeLastIndex) { return $this->getRelativeXpath($parentElement, $context, '/' . $tag); } foreach ($parentElement->elements($this->getSearchCriteria($childrenLocator)) as $child) { if ($child->equals($element)) { return $this->getRelativeXpath($parentElement, $context, '/' . $tag . '[' . $index . ']' . $path); } if ($child->name() == $tag) { ++$index; } } return null; }