Кросс-браузерное тестирование как мы знаем, это процесс, при котором вы тестируете свой веб-сайт в нескольких браузерах и версиях браузеров, работающих в разных операционных системах. Это делается для обеспечения кроссбраузерной совместимости веб-сайта или веб-приложения при доступе через различные браузеры. Если ваше веб-приложение не совместимо с кросс-браузером, вы не только потеряете потенциальных клиентов, но и можете пострадать от удержания клиентов. Эти различия в браузерах могут быть чем угодно, от проблем с кроссбраузерной компоновкой до кроссбраузерной совместимой типографии и эти межбраузерные различия возникают из-за того, что каждый браузер имеет уникальный механизм рендеринга, который отвечает за рендеринг веб-элементов.
Однако кросс-браузерное тестирование может занять много времени, если оно выполняется вручную. Подумайте о том, со сколькими версиями браузеров вам придется столкнуться, от устаревших до современных, и о большом разнообразии браузеров, доступных на рынке. Вам также придется рассмотреть конкретные браузеры, предлагаемые конкретными компаниями мобильной торговли. Существуют способы, которыми вы могли бы ускорить свои усилия по ручному кроссбраузерному тестированию и автоматизированному тестированию занимает первое место в списке для экономии ежедневного времени и усилий.
В этой статье упоминается автоматизированное тестирование с помощью JUnit и Selenium для веб-приложения с помощью простого скрипта.
JUnit – это инструмент модульного тестирования с открытым исходным кодом , который помогает тестировать единицы кода. Он в основном используется для модульного тестирования Java-проекта, однако его можно использовать с Selenium Webdriver для автоматизации тестирования веб-приложений . Таким образом, вы даже можете выполнить автоматизированное тестирование веб-приложения с помощью JUnit. Если быть точным, JUnit – это модульная платформа тестирования для Java, которая помогает писать тестовые примеры в более структурированном и улучшенном формате. Selenium и JUnit можно использовать независимо друг от друга, благодаря тому, что тестирование с использованием JUnit и Selenium в сочетании помогает писать тестовые примеры более структурированным способом. Мы рассмотрим следующие разделы для автоматизации тестового сценария для тестирования веб-приложений с помощью JUnit и Selenium grid:
- Загрузка банок JUnit.
- Добавление банок в ваш проект Selenium.
- Включение аннотаций и методов JUnit в ваши первые сценарии selenium.
- Облачное тестирование с помощью JUnit и Selenium с использованием лямбда-теста.
Шаг 1. Загрузка банок JUnit
Файлы jar JUnit можно загрузить с https://github.com/JUnit-team/JUnit4/wiki/Download-and-Install . Основными включенными файлами jar являются:
- Основными включенными файлами jar являются:
- Основными включенными файлами jar являются:
Загрузите и сохраните эти файлы в своей системе.
Шаг 2. Добавление Банок В Ваш Проект Selenium
Чтобы добавить внешние jar-файлы JUnit в свой проект, вам необходимо иметь продвинутый редактор кода/компилятор по вашему выбору. Обычно я работаю с eclipse, поэтому буду рассказывать, используя то же самое. Вам также необходимо загрузить файлы Selenium jar. Для того чтобы установить eclipse, вы можете обратиться к его официальному сайту. В зависимости от вашей операционной системы Windows или операционной системы вы можете загрузить соответствующие файлы. После установки Eclipse вы можете загрузить файлы Selenium jar с его официального веб-сайта . Для создания сценариев Selenium webdriver вам необходимо использовать драйверы, зависящие от языка пользователя. В нашем случае мы используем Java, поскольку Selenium grid поддерживает несколько языков, таких как C#, Ruby, Python, Javascript, а также Java. Загрузите файлы Selenium jar и включите их в рабочее пространство редактора кода/компилятора, теперь для сценария тестирования автоматизации для тестирования с JUnit и Selenium grid нам необходимо включить наши загруженные файлы Jar JUnit. Для этого выполните следующие действия:
Щелкните правой кнопкой мыши на созданном вами проекте и выберите свойства:
Нажмите на путь сборки Java в настройках:
Нажмите на кнопку “Добавить внешние банки”, добавьте загруженные файлы JUnit Jar и нажмите “ОК”, опубликуйте это:
Это добавит файлы jar JUnit в ваш проект Selenium. Основными файлами классов/исходными файлами, которые обычно используются в этих файлах JUnit Jar, являются:
- Утверждения
- Аннотации
- Параметризованный
- Игнорировать
- Тестовые слушатели и т.Д
Для получения подробного списка файлов классов или исходных файлов обратитесь сюда. Теперь давайте включим JUnit в ваш проект Selenium для продолжения тестирования веб-приложений с помощью JUnit и Selenium.
Шаг 3. Включение JUnit В Ваш Сценарий Selenium
Первым блоком для создания совместной работы в этой статье для тестирования с JUnit и Selenium для веб-приложения будет создание нашего первого простого сценария JUnit Selenium на https://www.lambdatest.com/ .
Справочный код:
import static org.junit.Assert.*;
import java.util.concurrent.TimeUnit;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
public class Lamdatest_Junit {
static WebDriver driver;
@BeforeClass
public static void BrowserOpen()
{
System.setProperty("webdriver.chrome.driver", "path of your chromedriver");
driver= new ChromeDriver() ;
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
}
@test
public void Register_User()
{
driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
driver.get("https://www.lambdatest.com/ ");
driver.manage().window().maximize();
driver.findElement(By.xpath("//a[text()='Free Sign Up']")).click();
driver.findElement(By.xpath("//input[@name='organization']")).sendKeys("LambdaTest");
driver.findElement(By.xpath("//input[@name='first_name']")).sendKeys("Test");
driver.findElement(By.xpath("//input[@name='last_name']")).sendKeys("User");
driver.findElement(By.xpath("//input[@name='email']")).sendKeys("User2@gmail.com");
driver.findElement(By.xpath("//input[@name='password']")).sendKeys("TestUser123");
driver.findElement(By.xpath("//input[@name='phone']")).sendKeys("9412262090");
driver.findElement(By.xpath("//button[text()='SIGN UP']")).click();
String url= driver.getCurrentUrl();
assertEquals("fail- unable to register", url, "https://accounts.lambdatest.com/user/email-verification");
}
@AfterClass
public static void BrowserClose()
{
driver.quit();
}
}Подробности:
Приведенный выше скрипт открывает браузер с помощью https://www.lambdatest.com/ и нажимает на кнопку “бесплатная регистрация”, чтобы зарегистрироваться. После регистрации скрипт проверит URL-адрес, на который он перенаправлен, чтобы убедиться в успешной регистрации. Мы использовали два класса JUnit, один из которых Аннотации класс, а другой Утверждения .
Сценарий состоит из трех разделов:
- @BeforeClass – Эта аннотация запускает фрагмент кода перед запуском любой аннотации в классе . Как вы можете видеть, здесь мы открыли браузер Chrome, прежде чем выполнять какие-либо действия с ним. Основные действия выполняются в методе @test с пометкой аннотации.
- @test – Этот метод тестирования обеспечивает функциональность, при которой открывается приложение и выполняется процесс регистрации. Для проверки результата мы использовали класс утверждений, в котором мы проверяем успешность процесса регистрации, используя контекст текущего URL-адреса. Эта тестовая аннотация запускает фрагмент кода после методов @BeforeClass и @BeforeTest и перед методами @Aftertaste и @AfterClass .
- @Последующий урок- Эта аннотация указывает JUnit запускать фрагмент кода после выполнения всех тестов . Этот метод аннотации обычно выполняет процесс закрытия браузера после выполнения всех действий.
Прилагаю видео выполнения вышеупомянутого скрипта:
До сих пор вы видели, как автоматизировать тестирование веб-приложений с помощью JUnit и Selenium с использованием локального экземпляра webdriver. Однако у этого есть и обратная сторона. Вы можете вызвать автоматическое кросс-браузерное тестирование только в браузерах, установленных на вашем компьютере. Кроме того, вам необходимо иметь свой компьютер каждый раз, когда вы хотите запустить автоматизированное тестирование с помощью JUnit и Selenium для веб-приложения. Именно поэтому тестирование в облаке становится доминирующим предпочтением во всем мире. Лямбда-тест – это облачный инструмент кросс-браузерного тестирования , который предлагает поддержку Selenium grid, предоставляя решение всех препятствий, с которыми вы сталкиваетесь при выполнении тестирования автоматизации с использованием вашего локального компьютера. Лямбда-тест предлагает сетку Selenium, состоящую из более чем 2000 браузеров, чтобы вы могли легко выполнять автоматизированное тестирование.
Позвольте мне продемонстрировать, как вы могли бы легко выполнить автоматизированное тестирование с помощью лямбда-теста.
Чтобы запустить свой набор тестов в нашей сетке Selenium, вам необходимо настроить несколько функций, чтобы ваши тесты выполнялись в удаленном браузере. Обратитесь к нашему инструменту генератора возможностей, который поможет вам легко получить желаемые возможности.
WebDriver driver = new RemoteWebDriver(new URL("https://" + username + ":" + accesskey + "@beta
.lambdatest.com/wd/hub"),
DesiredCapabilities.firefox());Теперь давайте начнем с простого теста Selenium WebDriver. Ниже приведен скрипт JUnit Selenium, который откроет пример приложения, которое будет выполнять следующую задачу:
- Отметьте первые два пункта как “готово”.
- Добавьте новый элемент в список.
- Верните добавленный товар.
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import java.net.URL;
public class JUnitTodo {
public String username = "YOUR_USERNAME";
public String authkey = "YOUR_ACCESS_KEY";
public static RemoteWebDriver driver = null;
public String gridURL = "@beta
.lambdatest.com/wd/hub";
boolean status = false;
@Before
public void setUp() throws Exception {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("browserName", "chrome");
capabilities.setCapability("version", "70.0");
capabilities.setCapability("platform", "win10"); // If this cap isn't specified, it will just get the any available one
capabilities.setCapability("build", "LambdaTestSampleApp");
capabilities.setCapability("name", "LambdaTestJavaSample");
capabilities.setCapability("network", true); // To enable network logs
capabilities.setCapability("visual", true); // To enable step by step screenshot
capabilities.setCapability("video", true); // To enable video recording
capabilities.setCapability("console", true); // To capture console logs
try {
driver = new RemoteWebDriver(new URL("https://" + username + ":" + accesskey + gridURL), capabilities);
} catch (MalformedURLException e) {
System.out.println("Invalid grid URL");
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
@test
public void testSimple() throws Exception {
try {
//Change it to production page
driver.get("https://4dvanceboy.github.io/lambdatest/lambdasampleapp.html");
//Let's mark done first two items in the list.
driver.findElement(By.name("li1")).click();
driver.findElement(By.name("li2")).click();
// Let's add an item in the list.
driver.findElement(By.id("sampletodotext")).sendKeys("Yey, Let's add it to list");
driver.findElement(By.id("addbutton")).click();
// Let's check that the item we added is added in the list.
String enteredText = driver.findElementByXPath("/html/body/div/div/div/ul/li[6]/span").getText();
if (enteredText.equals("Yey, Let's add it to list")) {
status = true;
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
@After
public void tearDown() throws Exception {
if (driver != null) {
((JavascriptExecutor) driver).executeScript("lambda-status=" + status); // relay whether the test has passed or failed as marked by the user
driver.quit();
}
}
}Вы также можете протестировать свои локальные файлы с помощью Lambda-теста Selenium grid для выполнения автоматического тестирования веб-приложения с помощью JUnit и Selenium. Вы можете сделать это с помощью расширенных возможностей, предоставляемых генератором возможностей лямбда-теста. Эти расширенные возможности помогут вам:
- Выполните тестирование на ваших локально размещенных веб-страницах.
- Создавайте журналы консоли браузера для каждого шага, выполняемого в рамках вашего теста.
- Настройте пользовательский часовой пояс для выполнения теста.
- Создавайте сетевые журналы во время выполнения теста.
Если мы хотим активировать все вышеупомянутые расширенные возможности, вам необходимо добавить следующие желаемые возможности:
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("tunnel",true); // allows you to run tests for your locally hosted web pages.
capabilities.setCapability("console",true); // generates console logs
capabilities.setCapability("network",true); // generates network logs
capabilities.setCapability("timezone","UTC+12"); //considering you want your test to run on the time zone UTC+12.Параллельное тестирование
Лямбда-тест также предоставляет возможность параллельного выполнения теста. С помощью параллельного тестирования лямбда-теста вы можете выполнить аналогичный тест одновременно в нескольких браузерах. Это помогает значительно сократить время, затрачиваемое на выполнение работ по тестовой сборке. Вот пример параллельного тестирования, выполненного для автоматизации тестирования веб-приложений с помощью JUnit и Selenium с использованием LambdaTest.
Чтобы запустить тест в разных браузерах одновременно, вам нужно будет создать вспомогательный класс, расширяющий параметризованный класс (org.junit.runners. Параметризованный) и реализует класс RunnerScheduler
(org.junit.бегуны.модель.RunnerScheduler) для параллельной поддержки тестов JUnit. Смотрите пример ниже:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import org.junit.runners.Parameterized;
import org.junit.runners.model.RunnerScheduler;
public class Parallelized extends Parameterized {
private static class ThreadPoolScheduler implements RunnerScheduler {
private ExecutorService executor;
public ThreadPoolScheduler() {
String threads = System.getProperty("junit.parallel.threads", "15");
int numThreads = Integer.parseInt(threads);
executor = Executors.newFixedThreadPool(numThreads);
}
@Override
public void finished() {
executor.shutdown();
try {
executor.awaitTermination(10, TimeUnit.MINUTES);
} catch (InterruptedException exc) {
throw new RuntimeException(exc);
}
}
@Override
public void schedule(Runnable childStatement) {
executor.submit(childStatement);
}
}
public Parallelized(Class> klass) throws Throwable {
super(klass);
setScheduler(new ThreadPoolScheduler());
}
}Вот пример теста JUnit, он будет представлять вспомогательный класс, используемый выше для выполнения параллельного тестирования.
import org.openqa.selenium.By;
import org.openqa.selenium.Platform;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.remote.DesiredCapabilities;
import org.openqa.selenium.remote.RemoteWebDriver;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.LinkedList;
@RunWith(Parallelized.class)
public class JUnitConcurrentTodo {
public String username = "YOUR_USERNAME";
public String accesskey = "YOUR_ACCESS_KEY";
public String gridURL = "@beta
.lambdatest.com/wd/hub";
public String platform;
public String browserName;
public String browserVersion;
public RemoteWebDriver driver = null;
boolean status = false;
@Parameterized.Parameters
public static LinkedList getEnvironments() throws Exception {
LinkedList env = new LinkedList();
env.add(new String[]{"WIN10", "chrome", "70.0"});
env.add(new String[]{"macos 10.12","firefox","62.0"});
env.add(new String[]{"WIN8","internet explorer","11"});
return env;
}
public JUnitConcurrentTodo(String platform, String browserName, String browserVersion) {
this.platform = platform;
this.browserName = browserName;
this.browserVersion = browserVersion;
}
@Before
public void setUp() throws Exception {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("browserName", browser);
capabilities.setCapability("version", browserVersion);
capabilities.setCapability("platform", platform); // If this cap isn't specified, it will just get the any available one
capabilities.setCapability("build", "JUnitParallelSample");
capabilities.setCapability("name", "JUnitParallelSampleTest");
capabilities.setCapability("network", true); // To enable network logs
capabilities.setCapability("visual", true); // To enable step by step screenshot
capabilities.setCapability("video", true); // To enable video recording
capabilities.setCapability("console", true); // To capture console logs
try {
driver = new RemoteWebDriver(new URL("https://" + username + ":" + accesskey + gridURL), capabilities);
} catch (MalformedURLException e) {
System.out.println("Invalid grid URL");
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
@test
public void testParallel() throws Exception {
try {
//Change it to production page
driver.get("https://4dvanceboy.github.io/lambdatest/lambdasampleapp.html");
//Let's mark done first two items in the list.
driver.findElement(By.name("li1")).click();
driver.findElement(By.name("li2")).click();
// Let's add an item in the list.
driver.findElement(By.id("sampletodotext")).sendKeys("Yey, Let's add it to list");
driver.findElement(By.id("addbutton")).click();
// Let's check that the item we added is added in the list.
String enteredText = driver.findElementByXPath("/html/body/div/div/div/ul/li[6]/span").getText();
if (enteredText.equals("Yey, Let's add it to list")) {
status = true;
}
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
@After
public void tearDown() throws Exception {
if (driver != null) {
((JavascriptExecutor) driver).executeScript("lambda-status=" + status);
driver.quit();
}
}
}Тестирование веб-приложений С помощью JUnit и Selenium В Облаке – это Должен
Облачное тестирование означает тестирование облачных приложений, размещенных в облаке. Использование Selenium вместе с JUnit для тестирования облачных сервисов для веб-приложений становится наиболее очевидным выбором из-за его возможностей запускать скрипт в нескольких браузерах и платформах с поддержкой любого языка, который можно выбрать для . Причина делает объединение JUnit и Selenium выгодным выбором для выполнения кросс-браузерного тестирования. Использование JUnit обеспечивает более структурированный способ написания вашего теста, который обеспечивает лучшее обслуживание, качество и эффективность по сравнению с использованием каких-либо фреймворков, таких как JUnit. Лямбда-тест как инструмент кроссбраузерного тестирования может помочь вам значительно сократить время и усилия, затрачиваемые на выполнение автоматизированного тестирования с помощью JUnit и Selenium. Лямбда-тест предлагает сетку Selenium, состоящую из более чем 2000 браузеров, а также поддерживает несколько языков программирования, таких как Javascript, Python, Ruby, C# и PHP. Использование Maven и Jenkins с Selenium и JUnit помогает сделать более мощную, плавную и комплексную автоматизацию облачных приложений, обеспечивая тем самым надежность всего потока . Мы продемонстрируем это в наших следующих статьях, так что следите за обновлениями и приятного тестирования!
Первоисточник: lambdatest.com 4 января 2019 года.
Статьи по теме:
- Как Выполнить Автоматизацию Тестирования С Помощью Фреймворка Gauge & Selenium?
- 13 Причин, По которым Selenium WebDriver Должен Быть Вашим Первым Выбором для Автоматизированного Тестирования!
- Автоматическое Кроссбраузерное Тестирование С Помощью Транспортира и Селена
- Использование PyUnit Для Тестирования Набора Тестов Selenium Python
Оригинал: “https://dev.to/lambdatesting/automated-testing-with-junit-and-selenium-for-browser-compatibility-4ndn”