Как запустить класс, который запускает несколько классов Selenium? - PullRequest
0 голосов
/ 02 июля 2018

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

package testNGresearch;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

import multipleTest.Loginer;

public class AllLoginTestsNG extends OneClickTest{

    public static WebDriver driver;
    String baseUrl = "https://9gag.com/";
    @BeforeTest
    public void openBrowser() {
        System.setProperty("webdriver.chrome.driver", "D:\\Selenium\\chromedriver.exe");
        driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    }

    @Test(priority = 1)
    public void GetUrl() throws InterruptedException {
        driver.get(baseUrl);
        Thread.sleep(1500);
        Loginer.login(driver);
    }
    @Test(priority = 2)
    public void clickSignUp() {
        Loginer1.signUp(driver);
    }
    @Test(priority = 3)
    public void cancelSignUp() {
        Loginer2.cancelSignUp(driver);
        driver.close();
    }
    @Test(priority=4)
    public void navigationTests() throws InterruptedException {
        driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get(baseUrl);
        Thread.sleep(1500);
        NavigationTestNG.navigation(driver);
    }
}

, а затем еще один (отдельный файл)

package testNGresearch;

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

public class Loginer extends AllLoginTestsNG{


    @Test
    public void login() {
        driver.findElement(By.xpath("/html/body/div[7]/div[1]/div[2]/div/div[3]/button[2]/span")).click();
        driver.findElement(By.xpath("//*[@id=\"jsid-login-button\"]")).click();
        driver.findElement(By.xpath("//*[@id=\"login-email-name\"]")).sendKeys("someuser");
        driver.findElement(By.xpath("//*[@id=\"login-email-password\"]")).sendKeys("somepass");
        driver.findElement(By.xpath("//*[@id=\"login-email\"]/div[3]/input")).click();
    }
}

Затем второй, которым управляет класс AllLogin

package testNGresearch;

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

public class Loginer1 extends AllLoginTestsNG {

    @Test
    public static void signUp(WebDriver driver) {
        driver.findElement(By.xpath("//*[@id=\"jsid-signup-button\"]")).click();
    }

}

Теперь у меня есть класс AllNavigation

package testNGresearch;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

public class AllNavigationTestsNG extends AllLoginTestsNG {

    public static WebDriver driver;
    String baseUrl = "https://9gag.com/";
    @BeforeTest
    public void openBrowser() {
        System.setProperty("webdriver.chrome.driver", "D:\\Selenium\\chromedriver.exe");
        driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    }
    @Test(priority = 1)
    public void startNavigating (WebDriver driver) throws InterruptedException {
        driver.get(baseUrl);
        Thread.sleep(1500);
        NavigationTestNG.navigation(driver);
    }
}

Который работает

package testNGresearch;

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

public class NavigationTestNG extends AllNavigationTestsNG {

    @Test (priority = 1)
    public static void navigation(WebDriver driver) throws InterruptedException {
        Thread.sleep(500);
        driver.findElement(By.xpath("/html/body/div[7]/div[1]/div[2]/div/div[3]/button[2]/span")).click();
        Thread.sleep(500);
        driver.findElement(By.xpath("//*[@id=\"top-nav\"]/div/a")).click();
    }
}

Таким образом, вопрос в том - возможно ли создать класс, который запускает класс AllLogin и класс AllNavigationTestNG (который заставляет их запускаться один за другим) Я создал класс OneClickTest, который выдает ошибки

package testNGresearch;

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

public class OneClickTest {

    public static void main(String[] args) {

        WebDriver driver;
        AllLoginTestsNG.allLogin(driver);
        AllNavigationTestsNG.anotherLogin(driver);
    }
}

Ответы [ 2 ]

0 голосов
/ 02 июля 2018
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite"  parallel="tests" verbose="1">
    <test name="testNGresearch" preserve-order="true">
        <classes>
            <class name="com.testNGresearch.AllNavigationTestsNG " />
            <class name="com.testNGresearch.AllLoginTestsNG" />
        </classes>
    </test> 
    <!-- Test -->
</suite> <!-- Suite -->
  1. Убедитесь, что вы указали правильные имена пакетов при указании тестируемых классов.

  2. Сделайте свой тест таким, чтобы - скажем, логин - полностью включили функциональность в один тест.

  3. Поместите все свои объекты страницы в отдельный класс, и вы можете сделать их статическими.
  4. Имеется только один класс для обслуживания функций, связанных с Webdriver.

Примечание - Как и login() внутри Loginer класса, это не очень хороший способ, так как вы зависите от какой-то другой функции, чтобы вывести вас на этот экран. Вы должны разработать тест настолько независимым, насколько это возможно, и поместить утверждения, относящиеся к одному, внутри себя. Дайте мне знать, если возникнут вопросы.

Для справки,

package testNGresearch;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.testng.annotations.BeforeTest;
import org.testng.annotations.Test;

import multipleTest.Loginer;

public class AllLoginTestsNG{

    public static WebDriver driver;
    String baseUrl = "https://9gag.com/";
    @BeforeTest
    public void openBrowser() {
        System.setProperty("webdriver.chrome.driver", "D:\\Selenium\\chromedriver.exe");
        driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    }

    @Test(priority = 1)
    public void GetUrl() throws InterruptedException {
        driver.get(baseUrl);
        Thread.sleep(1500);
     }

    @Test(priority = 2)
    public void cancelSignUp() {
        driver.close();
    }

}
0 голосов
/ 02 июля 2018

Этого можно добиться, выполнив файл комплекта TestNG.XML,

Это пример кода:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite"  parallel="tests" verbose="1">
    <test name="My Account Test" preserve-order="true">
        <classes>
            <class name="myAccount.login" />
            <class name="myAccount.registration" />
            <class name="myAccount.forgotPassword" />
            <class name="myAccount.signOut" />
        </classes>
    </test> 
    <!-- Test -->
</suite> <!-- Suite -->

Здесь сначала будет вызываться скрипт входа в систему, затем регистрация и так далее в определенном порядке. Таким образом, вы можете эффективно общаться с несколькими классами с помощью Single Click of TestNG.XML file suite.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...