如何在 Selenium Webdriver (JAVA) 中使用 "extends"
How to use "extends" in Selenium Webdriver (JAVA)
关于如何在 1 个浏览器中一个接一个地执行 2 classes 的任何想法。
我试图在我的第二个 class 中使用 "extends" 但我认为我的代码中缺少一些东西。关于如何解决这个问题的任何想法?
我的第一个Class
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();
}
}
我的第二个Class
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)" 将立即执行。
新建 class 并在那里启动浏览器。将此 class 扩展到那两个 classes
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() {
//...
其他 class 也
public class T3DetailedTimeTrackingReport extends Setup{
//...
谢谢,
穆拉利
- T3DetailedTimeTrackingReport包含4个测试方法:
- 登录
- GoToEmpMain
- GoToDTTR
- 点击下拉
这是你想要的吗?
@BeforeClass 注解方法在每次测试前执行class。所以两次 classes -> 两次执行
每个测试都有单独的驱动程序 class 有助于测试隔离,所以也许值得 运行 每个 class 新的未受伤的驱动程序?
请考虑释放测试所需的资源(close() 方法)
如果您仍然想在同一个驱动程序上执行所有测试,您可以这样做:
@BeforeSuite
public void invokeBrowser() {
//set up your driver here
}
@AfterSuite(alwaysRun=true)
public void closeBrowser() {
driver.close()
}
如果你决定让每个测试class使用新的驱动程序(为了隔离):
@BeforeClass
public static void makeSureBrowserReady() {
driver = new FirefoxDriver();
//set up your driver here
}
@AfterClass(alwaysRun=true)
public static void closeDriver() {
driver.close()
}
您的问题似乎与 testNG 相关,而不是 selenium/xml。这是一些关于它的文档 http://testng.org/doc/documentation-main.html
你必须在最后完成 class。在您的 html 中,只需在您声明的每个 class 的末尾添加。
<!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>
关于如何在 1 个浏览器中一个接一个地执行 2 classes 的任何想法。 我试图在我的第二个 class 中使用 "extends" 但我认为我的代码中缺少一些东西。关于如何解决这个问题的任何想法?
我的第一个Class
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();
}
}
我的第二个Class
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)" 将立即执行。
新建 class 并在那里启动浏览器。将此 class 扩展到那两个 classes
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() {
//...
其他 class 也
public class T3DetailedTimeTrackingReport extends Setup{
//...
谢谢, 穆拉利
- T3DetailedTimeTrackingReport包含4个测试方法:
- 登录
- GoToEmpMain
- GoToDTTR
- 点击下拉
这是你想要的吗?
@BeforeClass 注解方法在每次测试前执行class。所以两次 classes -> 两次执行
每个测试都有单独的驱动程序 class 有助于测试隔离,所以也许值得 运行 每个 class 新的未受伤的驱动程序?
请考虑释放测试所需的资源(close() 方法)
如果您仍然想在同一个驱动程序上执行所有测试,您可以这样做:
@BeforeSuite public void invokeBrowser() { //set up your driver here } @AfterSuite(alwaysRun=true) public void closeBrowser() { driver.close() }
如果你决定让每个测试class使用新的驱动程序(为了隔离):
@BeforeClass public static void makeSureBrowserReady() { driver = new FirefoxDriver(); //set up your driver here } @AfterClass(alwaysRun=true) public static void closeDriver() { driver.close() }
您的问题似乎与 testNG 相关,而不是 selenium/xml。这是一些关于它的文档 http://testng.org/doc/documentation-main.html
你必须在最后完成 class。在您的 html 中,只需在您声明的每个 class 的末尾添加。
<!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>