2014-04-01 1 views
2

Я новичок в PHPUnit и Selenium, и я хочу протестировать кнопку «удалить», подтвердив, что элемент с данным ID существует до нажатия кнопки, но больше не существует после нажатия кнопки.Как вы можете проверить, что элемент не существует с PHPUnit/Selenium?

Если я использую что-то вроде этого, чтобы проверить, что элемент был удален:

$this->assertFalse($this->byId('idRemoved')); 

Тогда я получаю отказ тест в byId(), потому что он не может найти idRemoved (это правда, потому что это не существует .)

Как я могу проверить отсутствие элемента, поэтому тест не удается, если найдено idRemoved?

+0

Вы хотите проверить, присутствует ли кнопка 'remove' или нет, прежде чем выполнять операцию щелчка? Я прав? – Manigandan

+0

Нет, кнопка удаления удаляет элемент со страницы (например, строку таблицы). Поэтому я хочу, чтобы кнопка удаления выполняла свое задание, и этот другой элемент был удален после нажатия кнопки. – Malvineous

ответ

-1

Java эквивалент будет

public boolean isElementExists(By by) { 
     boolean isExists = true; 
     try { 
      driver.findElement(by); 
     } catch (NoSuchElementException e) { 
      isExists = false; 
     } 
     return isExists; 
    } 
+0

почему ответ java для вопроса phpunit/selenium! – vasanth

+0

@vasanth, потому что я не знаком с php и хочу передать решение. OP смог получить эту идею и нашел ответ. Проверьте ответы OPs ниже. Это причинило какой-либо вред? – xyz

+0

phpselenium имеет разные API-интерфейсы. Параллельные параллели приведут к поиску решения в другом направлении. Это было мое единственное смиренное понимание. – vasanth

0

Вы можете утверждать, что конкретное исключение брошено, если вы хотите:

/** 
* @expectedException  MyException 
* @expectedExceptionMessage Some Message 
*/ 
public function testExceptionHasRightMessage() 
{ 
    //yourCodeThatThrows new MyException('Some Message') 
} 
+0

Это может работать для случаев, когда сам тест ищет недостаток элемента. Однако в моем случае отсутствие элемента - это просто дополнительная проверка безопасности в рамках более крупного теста, поэтому я не хочу, чтобы тест был прерван при вызове исключения, он должен только прервать, если исключение не выбрано. Но спасибо за предложение! – Malvineous

3

Это то, что я в конечном итоге использовала, благодаря предложению Карна в. Я отправляю его как еще один ответ, как я использую PHP, поэтому в интересах кого-либо еще с помощью PHPUnit и Selenium, вот подобный метод Карна, но для PHPUnit:

try { 
    $this->byId('idRemoved'); 
    $this->fail('The element was not deleted.'); 
} catch (PHPUnit_Extensions_Selenium2TestCase_WebDriverException $e) { 
    $this->assertEquals(PHPUnit_Extensions_Selenium2TestCase_WebDriverException::NoSuchElement, $e->getCode()); 
} 

Код был взят из line 1070 in the PHPUnit Selenium test code, который я нашел после того, как Карна указал мне в правильном направлении.

+0

Рад, что я могу помочь! – xyz

2

Для тех, кто прибывает поздно на вечеринке: лучшим решением было бы создать свой собственный ожидаемый класс условий и расширить Facebook\WebDriver\WebDriverExpectedCondition написать свой собственный метод:

public function elementNotPresent(WebDriverBy $by) 
{ 
    return new static(
     function (WebDriver $driver) use ($by) { 
      try { 
       $driver->findElement($by); 
       return false; 
      } catch (Exception $e) { 
       return true; 
      } 
     } 
    ); 
} 

Update: выше предназначен для Facebook Selenium WebDriver bindings for PHP

+0

+1, но обратите внимание, что это работает для https://github.com/facebook/php-webdriver/, а не при использовании старой Selenium2TestCase с https://github.com/giorgiosironi/phpunit-selenium. –

+0

@OndrejMachulda Я обновил свой ответ, чтобы указать на это. – junkystu

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