Selenium RC: как проверить, есть ли у элемента заданный атрибут? - PullRequest
2 голосов
/ 02 июня 2010

У меня есть несколько кнопок с атрибутом onclick, а некоторые нет. Я хочу проверить, имеет ли указанный элемент атрибут onclick. Как я могу это сделать?

getAttribute() возвращает значение атрибута, если оно есть. Когда этого не происходит, он генерирует исключение RuntimeException и останавливает тест (даже когда я помещаю его в блок try / catch).

$onclickValue = $this->getAttribute("$locator@onclick"); //works when the attribute exists

Ответы [ 4 ]

4 голосов
/ 02 июня 2010

Используя getEval(), вы можете выполнить функцию javascript hasAttribute(). Использование findElement() позволит вам работать с любым типом шаблона локатора.

$hasAttribute = $this->getEval('this.browserbot.findElement("' . $locator . '").hasAttribute("onclick")');
if ($hasAttribute === 'true') {
    //attribute exists
}

Обратите внимание, что getEval() возвращает строку, а не логическое значение.

2 голосов
/ 02 июня 2010

Сначала вы можете проверить наличие элемента, используя XPath //location/of/element[@onclick]

0 голосов
/ 14 июля 2011

Причина, по которой выдается исключение RuntimeException, заключается в том, как работает драйвер селена в PHPUnit.

Он рассматривает определенные ситуации как ошибки, которые выполняют stop () выполнения теста. В частности, код, который останавливает тест в этой ситуации, выглядит следующим образом:

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 позволит вашему коду перехватить исключение и обработать его как вы предпочитаете.

0 голосов
/ 17 марта 2011

Пожалуйста, извините, если это не относится к Selenium RC. В Selenium IDE можно использовать

assertElementNotPresent

команда, которая (несмотря на имя) может определить, присутствует ли данный атрибут. Единственным параметром является локатор элементов, который может иметь вид

element-id@attribute.

Конечно, это будет уместно, только если вы знаете, какие элементы должны иметь данный атрибут. Если нет, то я думаю, вам придется перебирать наборы элементов, используя выражения XPath.

...