2010-06-02 3 views
2

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

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

$onclickValue = $this->getAttribute("[email protected]"); //works when the attribute exists 

ответ

4

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

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

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

2

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

0

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

assertElementNotPresent

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

[email protected].

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

+0

Благодарим вас за этот комментарий. Я искал этот пример для Selenium IDE, а не RC, так что это помогло. –

0

Причина, по которой возникает 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

BTW, удаление вызовов, чтобы остановить() в doCommand() и getString() из /usr/share/php/PHPUnit/Extensions/SeleniumTestCase/Driver.php сделает ваш код способным поймать исключение и обработать его по своему усмотрению.

Смежные вопросы