Подтвердить что ты не робот

Функция 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.

Есть ли у вас какие-либо идеи, что не так?

4b9b3361

Ответ 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");