2016-04-08 2 views
0

Любая идея о том, как я могу выполнить 2 класса один за другим в 1 браузере. Я пытался использовать «extends» в своем втором классе, но я думаю, что в моем коде что-то не хватает. Любая идея о том, как я могу это исправить?Как использовать «extends» в Selenium Webdriver (JAVA)

Мой первый класс

package TestNg_Package; 

import java.util.concurrent.TimeUnit; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.testng.annotations.BeforeClass; 
import org.testng.annotations.Test; 

public class T3EmployeeMaintenance{ 
public static WebDriver driver = new FirefoxDriver(); 

    @BeforeClass 
    public void invokeBrowser() { 

    //driver.manage().timeouts().pageLoadTimeout(10, TimeUnit.SECONDS); 
    driver.get("http://xxxxxxxxxxxxxx.net"); 
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
    driver.manage().window().maximize(); 
    } 

    @Test(priority = 1) 
    public void Login() { 

    driver.findElement(By.name("login_id")).sendKeys("admin"); 
    driver.findElement(By.name("password")).sendKeys("12345678"); 
    driver.findElement(By.name("buttonAction")).click();  
    } 

    @Test(priority = 2) 
    public void GoToEmpMain(){ 
    driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);  
    driver.findElement(By.cssSelector(".fi-archive")).click(); 
    driver.findElement(By.linkText("Employee Maintenance")).click(); 
    } 
} 

Мой второй класс

package TestNg_Package; 

import java.util.concurrent.TimeUnit; 
import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.testng.annotations.BeforeClass; 
import org.testng.annotations.Test; 

public class T3DetailedTimeTrackingReport extends T3EmployeeMaintenance{ 

    @Test(priority = 1) 
    public void GoToDTTR(){ 
    driver.findElement(By.cssSelector("i.fi-graph-bar")).click(); 
    driver.findElement(By.linkText("Detailed Time Tracking Report")).click(); 
    } 

    @Test(priority = 2) 
    public void ClickDropdown(){ 
    driver.findElement(By.xpath("//*[@id='panel-1063-innerCt']")).click(); 
    WebElement ele = driver.findElement(By.id("ext-gen1204")); 
    ele.click(); 
    } 
} 

Мои TestNg.XML Код

<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd" > 
<suite name="Suite One"> 
<test name="Test One" > 
    <classes> 
    <class name="TestNg_Package.T3EmployeeMaintenance" /> 
    <class name="TestNg_Package.T3DetailedTimeTrackingReport" /> 
</classes> 
</test> 
</suite> 

Моя цель состоит в том, после выполнения «Класс 1 @test (Priority = 2) «Класс 2 @ Тест (Приоритет = 1)» будет выполняться сразу.

ответ

0

Создайте новый класс и запустите браузер. Продлить этот класс для этих двух классов

public class Setup { 

public static WebDriver driver; 

@BeforeSuite 
public void startUp(){ 

    driver=new FirefoxDriver(); 
    driver.manage().window().maximize(); 

} 

@AfterSuite 
public void tearDown(){ 

    //driver.quit(); 
} 
} 

Пожалуйста, удалите открытые статические драйвера WebDriver = новый FirefoxDriver(); в T3EmployeeMaintenance

public class T3EmployeeMaintenance extends Setup{ 
//public static WebDriver driver = new FirefoxDriver(); //no need of this now 

@BeforeClass 
public void invokeBrowser() { 
    //... 

для другого класса также

public class T3DetailedTimeTrackingReport extends Setup{ 
//... 

Спасибо, Мурали

+0

Спасибо, что это работает –

1
  1. T3DetailedTimeTrackingReport содержит 4 метода испытаний:
    • Вход
    • GoToEmpMain
    • GoToDTTR
    • ClickDropdown

это то, что вы хотели?

  1. @BeforeClass аннотированный метод выполняется перед каждым тестовым классом. Итак, два класса -> два исполнения

  2. Наличие отдельных драйверов для каждого тестового класса помогает протестировать изоляцию, поэтому, возможно, стоит запускать каждый класс в новом невредимом драйвере?

  3. Пожалуйста, обратите внимание высвобождая ресурсы Приобрел для испытаний (близкий() метод)

  4. Если вы стил хотите выполнить все тесты на тот же драйвер вы могли бы сделать это следующим образом:

    @BeforeSuite 
    public void invokeBrowser() { 
        //set up your driver here 
    } 
    
    @AfterSuite(alwaysRun=true) 
    public void closeBrowser() { 
        driver.close() 
    } 
    
  5. Если вы решили сделать каждый тестовый класс, чтобы использовать свежий драйвер (с целью изоляции):

    @BeforeClass 
    public static void makeSureBrowserReady() { 
        driver = new FirefoxDriver(); 
        //set up your driver here 
    } 
    
    @AfterClass(alwaysRun=true) 
    public static void closeDriver() { 
        driver.close() 
    } 
    
  6. Ваш вопрос больше связан с testNG, чем с селеном/xml.Вот некоторые документы об этом http://testng.org/doc/documentation-main.html

+0

Спасибо, что он также работает –

0

Вы должны использовать одноплодную шаблон дизайна, как я писал для Appium:

Нажмите ссылку для более подробно:

Click Details

Позволь мне знать, если необходимо более подробно.

0

Вы должны закончить класс в конце. в вашем html просто добавьте в конце каждого объявленного вами класса.