Как решить эту ошибку: "Класс PHPUnit_Extensions_SeleniumTestCase не найден"

Я пытаюсь запустить SeleniumTestCase с phpunit, но не могу запустить его с помощью скрипта phpunit.bat.

Моя цель - использовать phpunit с Selenium RC в CruiseControl и phpUnderControl. Вот как выглядит тест:

require_once 'PHPUnit/Extensions/SeleniumTestCase.php';

class WebTest extends PHPUnit_Extensions_SeleniumTestCase
{
    protected function setUp()
    {
        $this->setBrowser('*firefox');
        $this->setBrowserUrl('http://www.example.com/');
    }

    public function testTitle()
    {
        $this->open('http://www.example.com/');
        $this->assertTitleEquals('Example Web Page');
    }
}

Я также получил PEAR в include_path и PHPUnit, установленных с расширением Selenium. Я установил их с помощью грушевого установщика, так что я думаю, что это не проблема.

Любая помощь будет очень высоко ценится.

Спасибо Реми

10 ответов

Надеюсь, это более точный ответ, чем приведенный здесь (который не решил мою проблему). Если вы получаете эту ошибку, проверьте папку PEAR и посмотрите, действительно ли там находится файл "SeleniumTestCase.php":

/PEAR/PHPUnit/Extensions/SeleniumTestCase.php

Если это не так, самое простое, что нужно сделать, это удалить и переустановить PHPUnit с помощью PEAR ...

pear uninstall phpunit/PHPUnit

pear uninstall phpunit/PHPUnit_Selenium

pear install phpunit/PHPUnit

После выполнения вышеупомянутого и только одной установки PHPUnit_Selenium также был автоматически установлен, я не уверен, что это типично, так что некоторые, возможно, придется сделать...

pear install phpunit/PHPUnit_Selenium

Также см. http://www.phpunit.de/manual/3.5/en/installation.html для получения информации о канале PEAR, если это необходимо...

Вот сделка:

Если у вас есть проблема "Класс PHPUnit_Extensions_SeleniumTestCase не может быть найден в (имя файла testcase)", вы должны сделать следующие две вещи:

1. Переименуйте файл тестового примера в название класса, который он содержит2. Вы должны запустить phpunit из папки с вашими тестами.

Это должно исправить вашу проблему.

Эндрю

Я обнаружил, что следующий пример из учебника PHPUnit работал, в то время как та же самая ошибка появилась в тесте, который я написал. Решение было неожиданным. Убедитесь, что ваш класс находится внутри <?php .. ?> блок а не <? .. ?> блок в скрипте.

<?php
require_once 'PHPUnit/Framework.php';

class StackTest extends PHPUnit_Framework_TestCase
{
    public function testPushAndPop()
    {
        $stack = array();
        $this->assertEquals(0, count($stack));

        array_push($stack, 'foo');
        $this->assertEquals('foo', $stack[count($stack)-1]);
        $this->assertEquals(1, count($stack));

        $this->assertEquals('foo', array_pop($stack));
        $this->assertEquals(0, count($stack));
    }
}
?>

Вот как я решил эту проблему:

  1. Убедитесь, что установлено расширение curl для php, например, для ubuntu sudo apt-get install php5-curl
  2. Войти sudo pear install phpunit/PHPUnit_Selenium

После этого у вас должен быть установлен отсутствующий файл

Удачного кодирования...

Я просто переименовал файл, в котором находился мой тест, в "WebTest.php" (имя класса, который в нем содержится), и теперь тест работает нормально.

Не предполагайте, что установка груши произошла без проблем.

Я установил phpunit через pear, но несмотря на то, что установка прошла нормально, когда я заглянул внутрь папки, у меня были все эти файлы, начиная с.tmp, например, PHPUnit/Util/.tmpErrorHandler.php, поэтому, естественно, когда я запустил тест для первого время это дало мне ту же ошибку, что и выше. Проверив, что файла действительно нет, я вручную установил PHPUnit в ту же папку, что и pear, и увы, все было хорошо. Я в Mac/ Leopard.

О Selenim RC не забудьте запустить его, запустив в терминале java -jar /path/to/file/selenium-server.jar

Пытаться:

class WebTest extends \PHPUnit_Extensions_Selenium2TestCase

Это может быть проблема пространства имен, как это было для меня.

Посмотрите на один из комментариев в записи require_once в руководстве по php.

http://ie.php.net/manual/en/function.require-once.php

"require_once (и include_once для этого имеет значение) медленно

Кроме того, если вы планируете использовать модульные тесты и фиктивные объекты (то есть включать фиктивные классы до того, как реальные классы будут включены в класс, который вы хотите протестировать), он не будет работать, так как require() загружает файл, а не класс."

Хорошо, когда я использую встроенную команду: если lauching test из PhPunit dir, у меня возникает ошибка при запуске его из test dir, я не вижу ошибки...

но я до сих пор не имею доступа к серверу селена... должен ли я запускать его раньше или нет.

Если да, это странно, что мы не должны указывать дескриптор PhPUnit ...

Когда это терпит неудачу, это не всегда печатает самые подробные сообщения об ошибках.

Всегда не забывайте запускать Selenium до запуска теста.

java -jar selenium-server-standalone-2.39.0.jar

Вот пример кода, который работал для меня. http://www.siteconsortium.com/h/p1.php?id=php002. Очевидно, есть много разных способов написания набора тестов и запуска тестового примера, но я сначала использовал set_class_path, чтобы избавиться от проблем с классами.

Другие вопросы по тегам