我正在使用 TestNG 和 Java 来使用 Selenide 框架。我的测试在运行多个
@Test
注释时失败。对于单个@Test
,它正在工作。
public class LoginTest {
@BeforeTest
public void beforeTest() {
System.setProperty("webdriver.chrome.driver", ".//src//test//resources//Drivers//chromedriver.exe");
Configuration.browser = "chrome";
Configuration.timeout = 5000;
open("https://opensource-demo.orangehrmlive.com/");
}
@Test
public void Test1() {
$(By.id("txtUsername")).setValue("Admin");
$(By.id("txtPassword")).setValue("admin123");
$(By.id("btnLogin")).click();
$(By.id("welcome")).shouldHave(text("Welcome Admin"));
}
@Test
public void Test2() {
$(By.id("txtUsername")).setValue("Admin");
$(By.id("txtPassword")).setValue("admin123");
$(By.id("btnLogin")).click();
$(By.id("welcome")).shouldHave(text("Welcome Admin"));
$(By.id("welcome")).click();
$(By.xpath("//a[@href='/index.php/auth/logout']")).click();
}
}
首先,你不需要
System.setProperty("webdriver.chrome.driver", ".//src//test//resources//Drivers//chromedriver.exe");
Selenide 4.7 包含 WebDriverManager - 一个可以自动下载最新 webdriver 二进制文件的库。您无需关心下载 geckodriver.exe 或 chromedriver.exe 并将其添加到 PATH。所以你可以删除这一行。 另外,您还可以添加
Configuration.startMaximized = true;
对于并行执行,我建议您创建一个新类,例如 使用标签
@BeforeClass(alwaysRun = true)
进行 TestNGBase 并在每次测试之前将操作放在那里。另外,每个测试都继承自这个类
public class LoginTest extends TestNGBase
因此,Test1() 和 Test2() 应该位于 diff 类中 如果您想要多个测试步骤,也可以,但在类中,例如 testStep1() 、 testStep2() 。
如果您想保留此设置,您可以使用已有的设置
@BeforeMethod instead of @BeforeTest
从控制台错误中,您可以看到
Element not found
Element not found {By.id: txtUsername}
检查元素->是否存在可见。