Функция PHPUnit Selenium, clickAndWait() не работает в Opera
У меня проблема с PHPUnit_Selenium
в Opera. Если я нажал на элемент в своем тестовом коде, страница не загрузится. В других браузерах, таких как Firefox, IE, Chrome и Safari, он работает правильно.
Код:
$browser->clickAndWait(link);
Это следующие шаги от SELENIUM REMOTE CONTROL:
click(link)
waitForPageToLoad(120000)
После таймаута, если я нажму ссылку в браузере, страница перезагрузится.
У меня есть Selenium RC v. 2.31.0 и Opera версии 12.41, но я также тестирую Opera 11.50.
Есть ли у вас какие-либо идеи, что не так?
Ответы
Ответ 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 []
Ответ 2
В исходном сообщении не было достаточной информации, чтобы предлагать окончательное решение, но привязка с комментарием @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/body/div/table/tr/td (который во многих случаях вернет вам оба теста и значение)
- /html/body/div/table/tr [1]/td [1] (более точное соответствие только для проверки)
- /html/body/div/table/tbody/tr/td (обратите внимание на добавленный тём)
И так далее. Очевидно, что вы не сталкиваетесь с этой проблемой с более доступным уникальным идентификатором (IE id = > //* [@id = "someElement" ]), но во многих проектах, которые мы приняли, где модульные тесты были изначально выполненный только в одном браузере, мы видели ошибки, похожие на сообщенные, и выяснилось, что "санирующие" браузеры создают одну из двух проблем:
- Путь был восстановлен в браузере, который был "дезинфицирован", а затем запускался в браузере, который не мог и не мог найти элемент.
- Путь был восстановлен в браузере, который не был "дезинфицирован", а затем запущен в браузере, который выполняет санитацию.
Оба вопроса приводят к несоответствию.
Ответ 3
У меня была аналогичная проблема, и, к сожалению, только решение, которое я придумал, было... добавление "сна". Уродливый, но работает.
Ответ 4
После щелчка чего-либо всплывающего окна или создания вам просто нужно позвонить после нажатия кнопки "waitForElementPresent" или "waitForChange".
clickAndWait = click() + некоторые функции ожидания. Хорошей практикой является функция ожидания перед нажатием кнопки, которая сохраняет ваши асинхронные вызовы.
selenium.waitForElementPresent("myFooElement");
selenium.click("myFooElement");