Selenium RC: Как проверить, имеет ли элемент заданный атрибут?
У меня есть несколько кнопок с атрибутом onclick
, а некоторые - нет. Я хочу проверить, имеет ли указанный элемент атрибут onclick
. Как я могу это сделать?
getAttribute()
возвращает значение атрибута, если оно у него есть. Когда этого не происходит, он создает исключение RuntimeException и останавливает тест (даже когда я заключаю его в блок try/catch).
$onclickValue = $this->getAttribute("$locator@onclick"); //works when the attribute exists
4 answers
С помощью getEval()
вы можете выполнить функцию javascript hasAttribute()
. Использование findElement()
позволит вам работать с любым типом шаблона локатора.
$hasAttribute = $this->getEval('this.browserbot.findElement("' . $locator . '").hasAttribute("onclick")');
if ($hasAttribute === 'true') {
//attribute exists
}
Обратите внимание, что getEval()
возвращает строку, а не логическое значение.
Вы можете сначала проверить, присутствует ли элемент, используя XPath //location/of/element[@onclick]
Пожалуйста, извините меня, если это не относится к Selenium RC. В среде IDE Selenium можно использовать
assertElementNotPresent
Команда, которая (несмотря на название) может определить, присутствует ли данный атрибут. Это единственный параметр - локатор элементов, который может иметь вид
element-id@attribute
.
Конечно, это будет уместно только в том случае, если вы знаете, какие элементы должны иметь соответствующий атрибут. Если нет, то, я думаю, вам придется перебирать наборы элементов с помощью XPath выражения.
Причина, по которой возникает исключение RuntimeException, заключается в том, как работает драйвер selenium PHPUnit.
Он рассматривает определенные ситуации как ошибки, которые приводят к остановке() выполнения теста. В частности, код, который останавливает тест в этой ситуации, выглядит следующим образом:
protected function getString($command, array $arguments)
{
try {
$result = $this->doCommand($command, $arguments);
}
catch (RuntimeException $e) {
$this->stop();
throw $e;
}
return (strlen($result) > 3) ? substr($result, 3) : '';
}
Я уже открыл проблему, касающуюся этого способа обработки ошибок в драйвере, в https://github.com/sebastianbergmann/phpunit/issues/276
Кстати, удаление вызовов stop() в как doCommand(), так и getString() из /usr/share/php/PHPUnit/Extensions/SeleniumTestCase/Driver.php сделает ваш код способным улавливать исключение и обрабатывать его так, как вы предпочитаете.