/** * @dataProvider providerLocatorContructorsArguments */ public function testGettersShouldReturnValuesPassedToConstructor($url, $key, $type, $fieldset, $tab, $parameters, $pageKey) { $locator = new Locator($url, $key, $type, $fieldset, $tab, $parameters, $pageKey); $this->assertEquals($url, $locator->getPageUrl()); $this->assertEquals($key, $locator->getKey()); $this->assertEquals($type, $locator->getType()); $this->assertEquals($fieldset, $locator->getFieldset()); $this->assertEquals($tab, $locator->getTab()); $this->assertEquals($parameters, $locator->getParameters()); $this->assertEquals($pageKey, $locator->getPageKey()); }
/** * Returns XPath query of page element that correstonds to given locator * * @return string XPath query * @throws \OutOfRangeException If cannot find path by locator */ public function getXpath(Locator $locator) { // prepare query $query = ''; if ($locator->hasTab()) { $query .= "p:tab[@key='{$locator->getTab()}']"; } if ($locator->hasFieldset()) { $query .= "//p:fieldset[@key='{$locator->getFieldset()}']"; } if ($locator->hasKey()) { $query .= '//p:' . ($locator->getType() ?: '*') . "[@key='{$locator->getKey()}']"; } $query .= '/ancestor-or-self::*/@xpath'; // execute query $list = $this->query($query); // precess result if (!$list->length) { throw new \OutOfRangeException("Cannot find XPath by {$locator} on page '{$this->getKey()}'."); } $result = ''; foreach ($list as $item) { $result .= $item->value; } if ($locator->hasParameters()) { $patterns = array_map(function ($p) { return "%{$p}%"; }, array_keys($locator->getParameters())); $values = array_values($locator->getParameters()); $result = str_replace($patterns, $values, $result); } return $result; }