testng-eclipse - 如何在testng中一个接一个地运行类
问题描述
我有 2 个 java 类,我需要使用 testng xml 一个接一个地运行它们。但是当我运行 xml 时,这两个类正在并行执行。
我试过设置parallel=false,但它仍然并行执行
以下是我的课程:
第一类:
package pulse.roster;
import static org.testng.Assert.assertTrue;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;
public class RosterClockinFilter {
public WebDriver driver;
public Actions actions;
@BeforeSuite
public void launchApplication() {
System.setProperty("webdriver.chrome.driver",
"C:\\MyChromeDriver\\chromedriver_win32\\chromedriver.exe");
driver = new ChromeDriver();
driver.get("mysite");
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
actions = new Actions(driver);
}
public void closeApplication() {
driver.close();
}
@Test(priority = 0)
public void adminLogin() {
try {
actions.moveToElement(driver.findElement(By.name("userId")));
actions.click();
actions.sendKeys("admin");
actions.build().perform();
actions.pause(java.time.Duration.ofSeconds(1));
actions.moveToElement(driver.findElement(By.name("password")));
actions.click();
actions.sendKeys("abc@123");
actions.build().perform();
actions.pause(java.time.Duration.ofSeconds(1));
actions.moveToElement(driver.findElement(By.name("dcNumber")));
actions.click();
actions.sendKeys("7036");
actions.build().perform();
actions.moveToElement(driver.findElement(By
.cssSelector("body > ion-app > ng-component > ion-nav > page-login > ion-content > div.scroll-content > ion-card > ion-grid > form > ion-list > div.login-button > button > span")));
actions.click();
actions.build().perform();
} catch (Exception e) {
e.printStackTrace();
}
}
@Test(priority = 1)
public void rosterPage() {
actions.moveToElement(driver.findElement(By
.xpath("//*[@id='tab-t0-1']")));
actions.click();
actions.build().perform();
}
@Test(priority=2)
public void filterButton(){
WebDriverWait wait = new WebDriverWait(driver, 60);
wait.until(ExpectedConditions.visibilityOfElementLocated(By
.xpath("//*[@id='tabpanel-t0-1']/whos-here-page/div/clocked-card/ion-toolbar/div[2]/ion-grid/ion-row/ion-col[2]/button")));
actions.moveToElement(driver.findElement(By.xpath("//*[@id='tabpanel-t0-1']/whos-here-page/div/clocked-card/ion-toolbar/div[2]/ion-grid/ion-row/ion-col[2]/button")));
actions.click();
actions.build().perform();
}
@Test(priority=3)
public void selectClockin(){
actions.moveToElement(driver.findElement(By.xpath("//*[@id='tabpanel-t0-1']/whos-here-page/div/clocked-card/div/div/ion-row[3]/ion-col[1]/ion-row/ion-item[1]/div[1]/ion-radio")));
actions.click();
actions.build().perform();
}
@Test(priority=4)
public void selectApply(){
actions.moveToElement(driver.findElement(By.xpath("//*[@id='tabpanel-t0-1']/whos-here-page/div/clocked-card/div/div/div/ion-row")));
actions.click();
actions.build().perform();
}
@Test(priority=5)
public void checkFilter(){
String element=driver.findElement(By.xpath("//*[@id='tabpanel-t0-1']/whos-here-page/div/clocked-card/ion-content/div[2]/div[2]/ion-row/ion-col/div[2]/user-attendance-card/ion-list/div/ion-item[1]/div[1]/div/ion-label/ion-grid[2]/ion-row/ion-col[4]")).getText();
assertTrue(element.contains("-"));
}
}
第 2 类:
package pulse.roster;
import static org.testng.Assert.assertFalse;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.BeforeSuite;
import org.testng.annotations.Test;
public class RosterClockoutFilter {
public WebDriver driver;
public Actions actions;
@BeforeSuite
public void launchApplication() {
System.setProperty("webdriver.chrome.driver",
"C:\\MyChromeDriver\\chromedriver_win32\\chromedriver.exe");
driver = new ChromeDriver();
driver.get("mysite");
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
actions = new Actions(driver);
}
public void closeApplication() {
driver.close();
}
@Test(priority = 0)
public void adminLogin() {
try {
actions.moveToElement(driver.findElement(By.name("userId")));
actions.click();
actions.sendKeys("admin");
actions.build().perform();
actions.pause(java.time.Duration.ofSeconds(1));
actions.moveToElement(driver.findElement(By.name("password")));
actions.click();
actions.sendKeys("abc@123");
actions.build().perform();
actions.pause(java.time.Duration.ofSeconds(1));
actions.moveToElement(driver.findElement(By.name("dcNumber")));
actions.click();
actions.sendKeys("7036");
actions.build().perform();
actions.moveToElement(driver.findElement(By
.cssSelector("body > ion-app > ng-component > ion-nav > page-login > ion-content > div.scroll-content > ion-card > ion-grid > form > ion-list > div.login-button > button > span")));
actions.click();
actions.build().perform();
} catch (Exception e) {
e.printStackTrace();
}
}
@Test(priority = 1)
public void rosterPage() {
actions.moveToElement(driver.findElement(By
.xpath("//*[@id='tab-t0-1']")));
actions.click();
actions.build().perform();
}
@Test(priority=2)
public void filterButton(){
WebDriverWait wait = new WebDriverWait(driver, 60);
wait.until(ExpectedConditions.visibilityOfElementLocated(By
.xpath("//*[@id='tabpanel-t0-1']/whos-here-page/div/clocked-card/ion-toolbar/div[2]/ion-grid/ion-row/ion-col[2]/button")));
actions.moveToElement(driver.findElement(By.xpath("//*[@id='tabpanel-t0-1']/whos-here-page/div/clocked-card/ion-toolbar/div[2]/ion-grid/ion-row/ion-col[2]/button")));
actions.click();
actions.build().perform();
}
@Test(priority=3)
public void selectClockout(){
actions.moveToElement(driver.findElement(By.xpath("//*[@id='tabpanel-t0-1']/whos-here-page/div/clocked-card/div/div/ion-row[3]/ion-col[2]/ion-row/ion-item[1]/div[1]/ion-radio")));
actions.click();
actions.build().perform();
}
@Test(priority=4)
public void selectApply(){
actions.moveToElement(driver.findElement(By.xpath("//*[@id='tabpanel-t0-1']/whos-here-page/div/clocked-card/div/div/div/ion-row")));
actions.click();
actions.build().perform();
}
@Test(priority=5)
public void checkFilter(){
String element=driver.findElement(By.xpath("//*[@id='tabpanel-t0-1']/whos-here-page/div/clocked-card/ion-content/div[2]/div[2]/ion-row/ion-col/div[2]/user-attendance-card/ion-list/div/ion-item[6]/div[1]/div/ion-label/ion-grid[2]/ion-row/ion-col[4]")).getText();
assertFalse(element.isEmpty());
}
}
我的测试 xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Roster Suite" parallel="false" preserve-order="true" verbose="2">
<test name="Regression suite 1">
<classes>
<class name="pulse.roster.RosterClockinFilter"></class>
</classes>
</test>
<test name="Regression suite 2">
<classes>
<class name="pulse.roster.RosterClockoutFilter"></class>
</classes>
</test>
</suite>
如果有人可以指导我如何以系列方式而不是并行方式运行我的课程,那将会很有帮助。
解决方案
推荐阅读
- visual-studio-2019 - Microsoft Visual Studio Community 2019 CodeLens 参考计数器不正确
- gams-math - 如何修复 Gams 中的错误 149?(输入为常量的不受控集)
- javascript - 如何在“row-fluid div”中的应用程序根组件中调用我的按钮组件
- sql - 如何在元数据库的 LIKE 查询中使用变量?
- python - 错误:标签 [0] 不在 [index] 中
- python - IOError:[Errno 2] 没有这样的文件或目录:(Python:即使文件确实存在,我也会遇到此错误)
- java - 当我使用 Apache Storm 运行我的 JAR 时,为什么会引发 java.lang.NoClassDefFoundError ?(org/apache/storm/kafka/spout/KafkaSpoutConfig)
- vector - 如何将两个 Rust 向量按三个块交错成一个新向量?
- laravel - 从 laravel 的视图中传递值和调用控制器
- docker - 在 Docker-Compose 和 GitLab-CI 之间共享环境变量