【问题标题】:How to use "extends" in Selenium Webdriver (JAVA)如何在 Selenium Webdriver (JAVA) 中使用“扩展”
【发布时间】:2018-03-09 08:06:13
【问题描述】:

关于如何在 1 个浏览器中一个接一个地执行 2 个类的任何想法。 我试图在我的第二堂课中使用“扩展”,但我认为我的代码中缺少一些东西。关于如何解决这个问题的任何想法?

我的第一堂课

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(Priority=1)”。

【问题讨论】:

    标签: java xml selenium selenium-webdriver extends


    【解决方案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

    【讨论】:

      【解决方案2】:

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

       public class Setup {
      
      public static WebDriver driver;
      
      @BeforeSuite
      public void startUp(){
      
          driver=new FirefoxDriver();
          driver.manage().window().maximize();
      
      }
      
      @AfterSuite
      public void tearDown(){
      
          //driver.quit();
      }
      }
      

      请删除 public static WebDriver driver = new 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{
       //...
      

      谢谢你, 壁画

      【讨论】:

        【解决方案3】:

        你必须在最后完成课程。在您的 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> 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-07-12
          • 1970-01-01
          • 1970-01-01
          • 2018-10-25
          • 2015-08-09
          • 2012-07-10
          • 2016-01-16
          相关资源
          最近更新 更多