如何在Selenium Webdriver (JAVA)中使用"extends"



关于如何在一个浏览器中一个接一个地执行两个类的任何想法。我试着在第二节课上使用"extends",但我认为我的代码中缺少了一些东西。你知道我该怎么解决这个问题吗?

我的一等

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> 

我的目标是在执行"Class 1@Test(Priority=2)"之后,"Class 2@Test(优先级=1)"将立即执行。

  1. T3DetailedTimeTrackingReport包含4种测试方法:
    • 登录
    • GoToEmpMain
    • GoToDTTR
    • 单击下拉菜单

这是你想要的吗?

  1. @BeforeClass注释方法在每个测试类之前执行。所以两个类->两次执行

  2. 每个测试类都有单独的驱动程序有助于测试隔离,所以在新的未受伤的驱动程序中运行每个类可能是值得的?

  3. 请考虑释放为测试获取的资源(close()方法)

  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有关,而不是selenium/xml。这是一些关于它的医生http://testng.org/doc/documentation-main.html

创建新类并在那里启动浏览器。将这个类扩展到这两个类

 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驱动程序=new FirefoxDriver();在T3 EmployeeMaintenance 中

    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{
 //...

谢谢,Murali

你必须在最后完成课程。在html中,只需在您声明的每个类的末尾添加即可。

<!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> 
   <class name="TestNg_Package.T3DetailedTimeTrackingReport"> </class>
 </classes> 
 </test> `
 </suite> 

最新更新