Критический анализ селена

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

16
задан Mate Mrše 3 September 2019 в 07:12
поделиться

5 ответов

Если Вы используете , селен IDE к генерирует код, то Вы просто получаете список каждого действия, которое селен будет выполнять. Мне IDE Селена является хорошим способом запустить или сделать, быстрое "пытается видеть" тест. Но, когда Вы думаете о пригодности для обслуживания и большем количестве читаемого кода, необходимо записать собственный код.

А хорошим способом достигнуть хорошего кода селена является использование Шаблон Объекта страницы способом, что код представляет Ваш поток навигации. Вот хороший пример, который я вижу в Dojo Floripa Кодирования (из Бразилии):

public class GoogleTest {

    private Selenium selenium;

    @Before
    public void setUp() throws Exception {
            selenium = new DefaultSelenium("localhost", 4444, "*firefox",
                            "http://www.google.com/webhp?hl=en");
            selenium.start();
    }

    @Test
    public void codingDojoShouldBeInFirstPageOfResults() {
            GoogleHomePage home = new GoogleHomePage(selenium);
            GoogleSearchResults searchResults = home.searchFor("coding dojo");
            String firstEntry = searchResults.getResult(0);
            assertEquals("Coding Dojo Wiki: FrontPage", firstEntry);
    }

    @After
    public void tearDown() throws Exception {
            selenium.stop();
    }

}


public class GoogleHomePage {

    private final Selenium selenium;

    public GoogleHomePage(Selenium selenium) {
            this.selenium = selenium;
            this.selenium.open("http://www.google.com/webhp?hl=en");
            if (!"Google".equals(selenium.getTitle())) {
                    throw new IllegalStateException("Not the Google Home Page");
            }
    }

    public GoogleSearchResults searchFor(String string) {
            selenium.type("q", string);
            selenium.click("btnG");
            selenium.waitForPageToLoad("5000");
            return new GoogleSearchResults(string, selenium);
    }
}

public class GoogleSearchResults {

    private final Selenium selenium;

    public GoogleSearchResults(String string, Selenium selenium) {
            this.selenium = selenium;
            if (!(string + " - Google Search").equals(selenium.getTitle())) {
                    throw new IllegalStateException(
                                    "This is not the Google Results Page");
            }
    }

    public String getResult(int i) {
            String nameXPath = "xpath=id('res')/div[1]/div[" + (i + 1) + "]/h2/a";
            return selenium.getText(nameXPath);
    }
}

Hope, которая Помогает

27
ответ дан 30 November 2019 в 16:30
поделиться

Я использую Дистанционное управление Селена для тестирования приложений ASP.NET (который является тем, что я предполагаю, что Вы будете нацелены также), и оно работает отлично.

, Если Вы никогда не использовали Селена, наблюдайте часть из экранные демонстрации для использования IDE Селена. Это даст Вам хорошую идею того, как 'Селен' работает. IDE является плагином Firefox, который в основном позволяет Вам разработать быстрые тесты записи-и-игры, когда Вы идете. Для больших наборов тестов или для записи действительно удобных в сопровождении тестов, хотя, я рекомендовал бы Дистанционное управление Селена. (IDE является потрясающим, если Вы просто получаете запуск все же.)

Дистанционное управление Селена позволяет Вам использовать свой любимый язык и платформу поблочного тестирования для управления веб-браузером для выполнения тестов. Если Вы являетесь самыми довольными C#/NUnit, можно записать тестам тот путь и использовать всех положительных героев NUnit, которых Вы любите. (Например, плагин Test-Driven.net). Кроме того, так как Ваши тесты записаны на высокоуровневом языке, Вы в состоянии сделать, вещам нравится, наследовались конкретному тестовому классу, который можно использовать, чтобы заставить фактический метод тестирования кодировать намного более чистый. (Или по крайней мере это - способ, которым я пишу свои тесты. Это позволяет мне сценарии испытательного комплекса который, сохраняя мое количество строки метода тестирования в разумном числе.)

Вы упоминаете распределенное тестирование. К сожалению, я не нашел способ использовать Сетка Селена проект с NUnit. Сетка селена позволяет Вам выполнять свой набор тестов по числу различные машины и экземпляры браузера. Так вместо пробежки говорят 200 методов тестирования один за другим (т.е., последовательно), Вы могли распределить нагрузку, говорят четыре экземпляра Сетки (т.е., работающий в четырех различных экземплярах браузеров за один раз) на единственной машине или нескольких машинах в зависимости от того, как распределенный Вы хотите добраться.

, Если Вы пишете свои тесты в Java или PHP, хотя, у Вас могла бы быть лучшая удача. Я ожидаю, что это будет доступно через NUnit с выпуском NUnit2.5, который будет включать pNUnit для параллельного тестирования.

, Если у Вас есть дальнейшие вопросы о селене, просто разъясните свой исходный вопрос, и я буду рад попытаться выручить Вас. (Селен является только одним из тех инструментов, которые я каждый день использую, таким образом, я люблю помогать запустить новых людей с него..)

7
ответ дан 30 November 2019 в 16:30
поделиться

Я начал с IDE Селена и Ядром Селена. Те - определенно хорошие инструменты для запущения Вас. Но они не очень мощны, так как можно только использовать Selenese, Основанную на HTML команду командным языком Селена.

Теперь я использую Дистанционное управление Селена с драйвером Ruby, который позволяет мне использовать то, что предлагает Ruby. Я тестирую много сред: Windows 2000, XP, Vista, Mac 10.4/10.5, и для каждого из тех, которые применяются, Safari 2/3, Firefox 2/3, Internet Explorer 6/7.

Селен утверждает, что был совместим со всеми те ОС и браузеры, хотя у меня в настоящее время есть проблемы с Internet Explorer (мой первый вопрос на StackOverflow об этом, на самом деле). Но я не знаю ни о каких других инструментах, которые являются этим мощным и работы с таким количеством платформ.

самой большой проблемой, которую я имел с Селеном, является парсинг DOM. childNodes JavaScript ненадежен, потому что Safari/Firefox игнорирует пробел & узлы комментария, в то время как Internet Explorer не делает. XPath в Internet Explorer в 10-20 раз медленнее, чем в SF/и следующие innerHTML, не всегда надежно в IE.

3
ответ дан 30 November 2019 в 16:30
поделиться

Селен является довольно достойным инструментом, но существуют вещи пары предостеречься:

  • IDE Селена и ядро Селена не совместно используют 100% та же функциональность. Например, щелчок правой кнопкой поддерживается IDE, но текущий базовый выпуск не имеет его. Однако использование более новой версии из их репозитория решает это.

  • В случае расширения js, gwt и т.д. удостоверяются, что у Вас есть надлежащие идентификаторы для Ваших элементов отображения вместо автоматически сгенерированных (случайных).

  • тестовые сценарии Поддержания. Я видел случаи, где много усилий было приложено к тестам Селена и хорошему покрытию. Позже тесты начали перестать работать, поскольку человек, создающий их, был занят другими задачами, и никто еще не хотел коснуться их. Но это было проблемой с управлением, не Селеном.

1
ответ дан 30 November 2019 в 16:30
поделиться

Я большой поклонник Selenium. Однако есть одна важная проблема, о которой следует знать заранее: у Selenium IDE много проблем с всплывающими окнами. Эти проблемы не сохраняются в Selenium RC, но могут сделать разработку немного головной болью.

1
ответ дан 30 November 2019 в 16:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: