2013-03-11 2 views
21

У меня проблема с PHPUnit_Selenium в Opera. Если я нажал на элемент в своем тестовом коде, страница не загрузится. В других браузерах, таких как Firefox, IE, Chrome и Safari, он работает правильно.PHPUnit Selenium, функция clickAndWait() не работает в Opera

Код:

$browser->clickAndWait(link); 

Это следующие шаги от СЕЛЕНОВОГО пульта дистанционного управления:

click(link) 
waitForPageToLoad(120000) 

После тайм-аута, если нажать на ссылку в браузере перегружается страница.

У меня есть Selenium RC v. 2.31.0 и версия Opera 12.41, но я также тестирую Opera 11.50.

У вас есть идеи, что не так?

+0

вы искали Селен ошибка трекера? – cweiske

+0

Да, я искал в selenium bug tracker, но я не нашел, чтобы решить мою проблему. – Szymon

+0

Возможно ли, что ссылка связана с событием Javascript, которое неправильно обрабатывается Opera? Можете ли вы выполнить ссылку, щелкнув вручную на Opera? –

ответ

0

В исходном посте не было достаточной информации, чтобы предлагать окончательное решение, но связавшись с комментарием @Andre, «санизирующие» браузеры делают и, в свою очередь, предоставляют такие функции, как «Копировать xPath» быть очень вводящим в заблуждение и приводить к многочисленным проблемам во время тестирования, в зависимости от структуры xPath.

Например:

<html> 
    <head></head> 
    <body> 
     <div> 
      <table> 
       <tr> 
        <td>test</td> 
       </tr> 
       <tr> 
        <td>value</td> 
       </tr> 
      </table> 
     </div> 
    </body> 
</html> 

Хотя приведенный выше код является минимальным, браузеры сообщать о XPATH испытания в качестве одного из следующих способов:

  • /html/тела/DIV/стол/tr/td (который во многих случаях вернет вам и тест и значение)
  • /html/body/div/table/tr [1]/td [1] (более точное совпадение только для проверки)
  • /html/body/div/table/tbody/tr/td (нет tice добавленный tbody)

И так далее. Очевидно, что вы не сталкиваетесь с этой проблемой с более доступным уникальным идентификатором (IE id => // * [@ id = "someElement"]), но во многих проектах, которые мы приняли, где модульные тесты были первоначально сделано только на одном браузере, мы уже видели ошибки, подобные той, сообщили, и выяснилось, что «санировать» браузеры создают один из двух проблем:

  • путь был получен в браузере, который «продезинфицировать », а затем запустить в браузере, который не смог бы и не смог бы найти элемент.
  • Путь был найден в браузере, который не был «дезинфицирован», а затем запущен в браузере, который выполняет санировку.

Оба вопроса приводят к несоответствию.

0

У меня была аналогичная проблема, и, к сожалению, только решение, которое я придумал, было ... добавление «сна». Уродливый, но работает.

-1

После щелчка что-то всплывающее или создающее вам просто нужно позвонить после нажатия кнопки «waitForElementPresent» или «waitForChange».

clickAndWait = click() + некоторые функции ожидания. Хорошая практика используется функцией wait перед нажатием кнопки, что избавляет вас от асинхронных вызовов.

selenium.waitForElementPresent(“myFooElement”); 
selenium.click(“myFooElement”); 
1

У меня был этот вопрос в FF, а также, это было решение, которое я придумал:

def wait_for_element_by_id(eid): 
    "Wait for an element to be present" 
    element = WebDriverWait(driver, 10).until(
     EC.presence_of_element_located((By.ID, eid)) 
    ) 
    return [] 
Смежные вопросы