В отношении повторного использования кода необходимо учитывать два аспекта:
- Устранение дублирования кода в вашей собственной базе кода - c_maker коснулся этого.
- Устранение дублирования кода из кода, сгенерированного Selenium IDE .
Я должен отметить, что мои комментарии сильно зависят от одностороннего рабочего процесса, который вы используете, jcollum, но даже более того: я использую IDE для генерации кода только один раз для данного тестового примера. Я никогда не возвращаюсь в IDE, чтобы изменить контрольный пример и повторно экспортировать его. (Я сохраняю контрольный пример IDE в качестве диагностического инструмента, когда хочу поэкспериментировать с вещами, пока я настраиваю и настраиваю свой контрольный пример в коде (в моем случае C #).
Причины, по которым я предпочитаю использовать тесты IDE только в качестве отправной точки:
- В тестах IDE всегда будет много дублирования кода от одного теста к другому; иногда даже в течение одного теста. Это просто природа зверя.
- В коде я могу сделать тестовый пример более «удобным», т. Е. Я могу инкапсулировать тайные локаторы в свойство или метод с осмысленным именем, чтобы было намного понятнее, что делает тестовый пример.
- Работа в коде, а не в IDE, обеспечивает гораздо большую гибкость.
Итак, вернемся к IDE-сгенерированному коду: он всегда имеет огромное количество дубликатов. Пример:
verifyText "//form[@id='aspnetForm']/div[2]/div/div[2]/div[1]/span" Home
генерирует этот блок кода:
try
{
Assert.AreEqual("Home",
selenium.GetText("//form[@id='aspnetForm']/div[2]/div/div[2]/div[1]/span"));
}
catch (AssertionException e)
{
verificationErrors.Append(e.Message);
}
Каждая последующая команда verifyText генерирует идентичный блок кода, отличающийся только двумя параметрами.
Мое решение этого резкого запаха кода заключалось в разработке Selenium Sushi , шаблона проекта Visual Studio C # и библиотеки, которая позволяет устранить большинство, если не все, это дублирование. С помощью библиотеки я могу просто написать эту одну строку кода, чтобы она соответствовала исходной строке кода из тестового примера IDE:
Verify.AreEqual("Home",
selenium.GetText("//form[@id='aspnetForm']/div[2]/div/div[2]/div[1]/span"));
У меня есть обширная статья на эту тему ( Веб-тестирование с Selenium Sushi: практическое руководство и набор инструментов ), которая была только что опубликована на Simple-Talk.com в феврале 2011 года.