使用 Selenide 执行两个测试用例时测试失败

问题描述 投票:0回答:2

我正在使用 TestNG 和 Java 来使用 Selenide 框架。我的测试在运行多个

@Test
注释时失败。对于单个
@Test
,它正在工作。

Console error eclipse

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();

    }

}
java testng selenide
2个回答
2
投票

首先,你不需要

        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

2
投票

从控制台错误中,您可以看到

Element not found

Element not found {By.id: txtUsername}

检查元素->是否存在可见。

© www.soinside.com 2019 - 2024. All rights reserved.