Тестирование автоматизации - Selenium WebDriver - Запуск нескольких тестовых случаев - PullRequest
2 голосов
/ 04 ноября 2019

У меня возникли проблемы с тестированием автоматизации. У меня в Eclipse IDE около 50 тестовых случаев. Все тесты в разных классах. Кроме того, у меня есть один BaseClass, который содержит @beforeclass и @afterclass. В @beforeclass открывается браузер, открывается URL-адрес и URL-адрес веб-сайта, а затем выполняется процедура входа в систему. Тогда мои тесты работают. Все они начинаются с аннотации @Test. Я связываю их с помощью TestNG Suite. Базовый класс: Мой класс BaseClass.java Класс MyBaseClass.java TestNg: My Suite Пример теста(Класс): Мой пример теста (класс)

Вот мой вопрос: я хочу использовать приоритет (например, @Test (priority = 1)) для этих классов (тестовых случаев)для сокращения рабочей силы. Но когда есть проблема с моими кодами;мой тест автоматизации останавливается. Я хочу, это будет продолжаться, кроме остановки.

Второй вариант - использование TestNG. TestNG в порядке, но в каждом случае открывается браузер. Как создать тест, например, открыть один браузер и запустить все тестовые случаи в этом браузере?

Кстати, вот мой пример теста для вашей полной картины:

- @ beforeclass: открыть браузер - открыть URL - логин

@ test1: перейти к продуктамЭкран - нажмите «Создать продукт» - создайте продукт с начальным количеством - затем нажмите кнопку «Сохранить», он снова должен появиться на экране продуктов.

@ test2: нажмите кнопку «Создать продукт» еще раз. - создать товар без начального количества - нажмите кнопку «Сохранить», в нем должна появиться ошибка. нажмите кнопку отмены, чтобы продолжить третий @ тест

@ тест3: так далее ...

- @ дополнительный класс: закрыть браузер

Я очень благодарен за вашу помощь! Спасибо!


Редактировать: Я переключил свои коды следующим образом. Потому что я не хочу, чтобы моя автоматизация снова и снова открывала новый браузер. Все мои тесты связаны только с одним экраном. (продукты) Все, что я хочу, это заказать:

  1. Инициировать @BeforeSuite (открыть браузер, URL-адрес ..)
  2. Инициировать @BeforeClass (перейти на экран "Продукты"- потому что это общий экран для всех случаев)
  3. Инициировать @Test для тестового примера 1
  4. Инициировать @AfterClass (снова перейти на экран "Продукты" для соединения с тестовым примером 2
  5. Инициируйте @Test для контрольного примера 2

Мой класс теста NG:

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" >

<suite name="AllTests" verbose="10" >

  <test name="prcr1.1" >
    <classes>
       <class name="com.example.product.prcr1dot1" />
    </classes>
  </test>

  <test name="prcr1.2" >
    <classes>
       <class name="com.example.product.prcr1dot2" />
    </classes>
  </test>
  </suite>

Мой базовый класс:

public class BaseClass {
    protected WebDriver driver;

    @BeforeSuite

    public void openMyexample() throws InterruptedException {
        System.out.println("Initiate LoginTest Test...");
        driver = utilities.DriverFactory.open("chrome");
        driver.manage().window().maximize();
        driver.get("https://mystage.example.com/en/public/login/?isTestAutomationLive=true");
        System.out.println("example Page Has Been Opened..");

        WebDriverWait wait = new WebDriverWait(driver, 20);
        wait.until(ExpectedConditions.elementToBeClickable((By.name("email"))));

        // Enter Username Section
        WebElement username = driver.findElement(By.name("email"));
        username.sendKeys("automationproducts4@example.com");
        Thread.sleep(1000);
        wait.until(ExpectedConditions.elementToBeClickable((By.name("password"))));
        // Enter Password Section
        WebElement password = driver.findElement(By.name("password"));
        password.sendKeys("Test*01");
        Thread.sleep(1000);
        wait.until(ExpectedConditions.elementToBeClickable((By.xpath("//form[@id='frmLogin']/button"))));

        // Click Login Button
        WebElement logInButton = driver.findElement(By.xpath("//form[@id='frmLogin']/button"));
        logInButton.click();

        // PAGE LOADER

        wait.until(ExpectedConditions.elementToBeClickable((By.xpath("//span[contains(.,'×')]"))));

        Thread.sleep(1000);

        // Integration Message Function WebElement - Option 1: WebElement
        WebElement popupCancelButton = driver.findElement(By.xpath("//span[contains(.,'×')]"));
        popupCancelButton.click();
        Thread.sleep(3000);
    }

    @BeforeClass
    public void openProducts() throws InterruptedException {

        WebDriverWait wait = new WebDriverWait(driver, 20);
        // From Dashboard Section to Product Section
        wait.until(ExpectedConditions.elementToBeClickable((By.xpath("//a[contains(text(),'Products')]"))));
        WebElement productButton = driver.findElement(By.xpath("//a[contains(text(),'Products')]"));
        productButton.click();
        Thread.sleep(4000);

        wait.until(ExpectedConditions.elementToBeClickable((By.xpath("//button[contains(.,'Create Product')]"))));
        WebElement createProductButton = driver.findElement(By.xpath("//button[contains(.,'Create Product')]"));
        createProductButton.click();
        Thread.sleep(4000);
    }

    @AfterClass
    public void closeProducts() throws InterruptedException {

        WebDriverWait wait = new WebDriverWait(driver, 20);
        wait.until(ExpectedConditions.elementToBeClickable((By.xpath("//a[contains(text(),'Products')]"))));
        WebElement productButton = driver.findElement(By.xpath("//a[contains(text(),'Products')]"));
        productButton.click();
        Thread.sleep(4000);

    }

    @AfterSuite
    public void closeMyexample() throws InterruptedException {
        WebDriverWait wait = new WebDriverWait(driver, 60);

        Thread.sleep(4000);

        // Sign Out Thread.sleep(5000);
        wait.until(ExpectedConditions.elementToBeClickable((By.xpath("//div[2]/i"))));
        WebElement logoutScrollDownButton = driver.findElement(By.xpath("//div[2]/i"));
        logoutScrollDownButton.click();
        Thread.sleep(3000);
        WebElement signoutButton = driver.findElement(By.xpath("//a[contains(.,'Sign Out')]"));
        signoutButton.click();

        // Close Browser
        System.out.println("Your Test Has Been Ended Successfully.");
        Thread.sleep(1000);
        System.out.println("Your Test is going to Close..");
        driver.quit();

    }

    // Sleep Function
    private void sleep(long m) {
        try {
            Thread.sleep(m);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}

Мой контрольный пример 1:

пакет com.example.product;

import utilities.BaseClass;

//Test Case 1: PRCR - 1.1
//Creating a new product with a unique SKU 
public class prcr1dot1 extends BaseClass {
    @Test
    public void prcr1dot1() throws InterruptedException {

        WebDriverWait wait = new WebDriverWait(driver, 20);

        wait.until(ExpectedConditions.elementToBeClickable((By.name("sku"))));
        String uuid = UUID.randomUUID().toString();
        driver.findElement(By.name("sku")).sendKeys(uuid);

        driver.findElement(By.name("name")).sendKeys(uuid);

        WebElement packType = driver
                .findElement(By.xpath("//kendo-dropdownlist[@id='packTypeName']//span[@class='k-input']"));
        packType.click();
        wait.until(ExpectedConditions.elementToBeClickable((By.xpath(
                "/html//platform-root/kendo-popup[@class='k-animation-container k-animation-container-shown']//input"))));
        driver.findElement(By.xpath(
                "/html//platform-root/kendo-popup[@class='k-animation-container k-animation-container-shown']//input"))
                .sendKeys(uuid);
        wait.until(ExpectedConditions.elementToBeClickable((By.id("btnCreateProductPackTypeName"))));
        WebElement createPackType = driver.findElement(By.id("btnCreateProductPackTypeName"));
        createPackType.click();

        wait.until(ExpectedConditions.elementToBeClickable((By.xpath("//button[contains(.,'SAVE')]"))));
        WebElement productSaveButton = driver.findElement(By.xpath("//button[contains(.,'SAVE')]"));
        productSaveButton.click();
        Thread.sleep(8000);
    }
}

Мой контрольный пример 2:

import utilities.BaseClass;

public class prcr1dot2 extends BaseClass {
    // Test Case 2: PRCR - 1.2
    // Creating a new product with the used SKU

    @Test
    public void prcr1dot2() throws InterruptedException {

        WebDriverWait wait = new WebDriverWait(driver, 20);

        wait.until(ExpectedConditions.elementToBeClickable((By.name("sku"))));
        driver.findElement(By.name("sku")).sendKeys("SKU08");

        String uuid = UUID.randomUUID().toString();
        driver.findElement(By.name("name")).sendKeys(uuid);

        WebElement packType = driver
                .findElement(By.xpath("//kendo-dropdownlist[@id='packTypeName']//span[@class='k-input']"));
        packType.click();
        wait.until(ExpectedConditions.elementToBeClickable((By.xpath(
                "/html//platform-root/kendo-popup[@class='k-animation-container k-animation-container-shown']//input"))));
        driver.findElement(By.xpath(
                "/html//platform-root/kendo-popup[@class='k-animation-container k-animation-container-shown']//input"))
                .sendKeys(uuid);
        wait.until(ExpectedConditions.elementToBeClickable((By.id("btnCreateProductPackTypeName"))));
        WebElement createPackType = driver.findElement(By.id("btnCreateProductPackTypeName"));
        createPackType.click();

        JavascriptExecutor jsx = (JavascriptExecutor) driver;
        jsx.executeScript("window.scrollBy(0,450)", "");

        WebElement productSaveButton = driver.findElement(By.xpath("//button[contains(.,'SAVE')]"));
        productSaveButton.click();

        Thread.sleep(5000);
        wait.until(ExpectedConditions.elementToBeClickable((By.xpath("//button[contains(.,'Create Product')]"))));

        WebElement createProductButton2 = driver.findElement(By.xpath("//button[contains(.,'Create Product')]"));
        createProductButton2.click();

        wait.until(ExpectedConditions.elementToBeClickable((By.name("sku"))));
        driver.findElement(By.name("sku")).sendKeys("SKU08");

        String uuid2 = UUID.randomUUID().toString();
        driver.findElement(By.name("name")).sendKeys(uuid2);

        WebElement packType2 = driver
                .findElement(By.xpath("//kendo-dropdownlist[@id='packTypeName']//span[@class='k-input']"));
        packType2.click();
        wait.until(ExpectedConditions.elementToBeClickable((By.xpath(
                "/html//platform-root/kendo-popup[@class='k-animation-container k-animation-container-shown']//input"))));
        String uuid3 = UUID.randomUUID().toString();
        driver.findElement(By.xpath(
                "/html//platform-root/kendo-popup[@class='k-animation-container k-animation-container-shown']//input"))
                .sendKeys(uuid3);
        wait.until(ExpectedConditions.elementToBeClickable((By.id("btnCreateProductPackTypeName"))));
        WebElement createPackType2 = driver.findElement(By.id("btnCreateProductPackTypeName"));
        createPackType2.click();

        /*
         * WebElement productSaveButton2 =
         * driver.findElement(By.xpath("//button[contains(.,'SAVE')]"));
         * productSaveButton2.click(); Thread.sleep(5000); WebElement
         * productCancelButton2 =
         * driver.findElement(By.xpath("//button[contains(.,'CANCEL')]"));
         * productCancelButton2.click(); Thread.sleep(2000);
         * wait.until(ExpectedConditions.elementToBeClickable((By.xpath(
         * "//button[contains(.,'YES')]")))); WebElement productCancelYesButton =
         * driver.findElement(By.xpath("//button[contains(.,'YES')]"));
         * productCancelYesButton.click();
         */

    }

}

1 Ответ

0 голосов
/ 04 ноября 2019

Я не уверен, что это решит вашу проблему или нет. Но эта идея работает для меня. Используя этот способ, вы можете запустить все тестовые примеры в одном браузере, не открывая их несколько раз.

Здесь у меня есть три класса

test1.java

test2.java

test2.java

И Mainclass.java

Здесьэто test1.java

package test;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.AfterMethod;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

public class test1 {

    @BeforeClass
    public void before(){

    }
    @Test
    public static void test(WebDriver driver){
        driver.get("https://www.google.com");
    }
    @AfterMethod
    public void after(){

    }
}

Вот test2.java

package test;

import org.openqa.selenium.WebDriver;
import org.testng.annotations.Test;

public class test2 {
    @Test
    public static void test(WebDriver driver){
        driver.get("https://www.yahoo.com");
    }
}

Вот файл mainclass.java, в который я передал сессию драйвера на тест

package test;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

public class Mainclass {

    public static void main(String[]args){
        WebDriver driver;
        driver=new ChromeDriver();
        test1.test(driver);
        test2.test(driver);
    }

}

Теперь вам нужно запустить mainclass из файла testing.xml.

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

Я не уверен, что какая-либо другая идеальная идея доступна или нет, но она наверняка будет работать для вас

...