javascript - Selenium 测试未正确失败 - 通过但配置失败而不是 "proper"失败

标签 javascript java selenium selenium-webdriver testng

嗨,我仍然是 Selenium/Scripting/Java 的新手,我仍然处于将其他地方的代码组合在一起以完成工作的阶段(主要是教程和记录器)

无论如何,我试图编写一个脚本来检查特定的“元素”是否存在(我也想要相反),当它找到“元素”时,我可以让脚本正确传递,但如果更改元素详细信息,所以我知道它应该失败(因为它不存在) TestNG 仍然通过测试,但给出配置失败?

我想我错过了一些东西来涵盖测试的失败方面,但不知道如何去做,每次我尝试并让它遇到这个问题。

package Links;

import org.testng.annotations.*;
import static org.testng.Assert.*;
import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;

public class TestArea {
    private WebDriver driver;
    private StringBuffer verificationErrors = new StringBuffer();

@BeforeClass(alwaysRun = true)
public void setUp() throws Exception {
    System.setProperty("webdriver.gecko.driver", "C:\\Automation\\SeleniumFiles\\Browser Drivers\\geckodriver.exe");
    driver = new FirefoxDriver();

}

@Test
public void Example() throws Exception {
    driver.get(
            "http://MyWebsite");
    try {
        assertTrue(isElementPresent(
                By.xpath("The Element I want look for ")));

    } catch (Error e) {
        verificationErrors.append(e.toString());
    }
}
// -------------------------------------------------------------------------------------

@AfterClass(alwaysRun = true)
public void tearDown() throws Exception {
    driver.quit();
    String verificationErrorString = verificationErrors.toString();
    if (!"".equals(verificationErrorString)) {
        fail(verificationErrorString);
    }
}

private boolean isElementPresent(By by) {
    try {
        driver.findElement(by);
        return true;
    } catch (NoSuchElementException e) {
        return false;
    }
}
}

“通过”测试但配置失败的示例。

FAILED CONFIGURATION: @AfterClass tearDown java.lang.AssertionError: java.lang.AssertionError: expected [true] but found [false] at org.testng.Assert.fail(Assert.java:96) at Links.TestArea.tearDown(TestArea.java:39) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124) at org.testng.internal.MethodInvocationHelper.invokeMethodConsideringTimeout(MethodInvocationHelper.java:59) at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:455) at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:222) at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:142) at org.testng.internal.TestMethodWorker.invokeAfterClassMethods(TestMethodWorker.java:214) at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111) at org.testng.TestRunner.privateRun(TestRunner.java:648) at org.testng.TestRunner.run(TestRunner.java:505) at org.testng.SuiteRunner.runTest(SuiteRunner.java:455) at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:450) at org.testng.SuiteRunner.privateRun(SuiteRunner.java:415) at org.testng.SuiteRunner.run(SuiteRunner.java:364) at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52) at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:84) at org.testng.TestNG.runSuitesSequentially(TestNG.java:1208) at org.testng.TestNG.runSuitesLocally(TestNG.java:1137) at org.testng.TestNG.runSuites(TestNG.java:1049) at org.testng.TestNG.run(TestNG.java:1017) at org.testng.remote.AbstractRemoteTestNG.run(AbstractRemoteTestNG.java:114) at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251) at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

PASSED: Example

=============================================== Default test Tests run: 1, Failures: 0, Skips: 0

Configuration Failures: 1, Skips: 0

=============================================== Default suite Total tests run: 1, Failures: 0, Skips: 0 Configuration Failures: 1, Skips:

0

当测试可以找到该元素时,我没有遇到配置问题。

提前非常感谢

最佳答案

您的测试代码中存在一些问题。

默认情况下,TestNG 在以下情况下会失败 @Test 方法:

  • 断言失败
  • 测试方法引发异常。

因此,您不需要将 assertTrue() 调用包装在 try..catch block 中。如果您想运行所有断言并让测试方法最终失败,您应该使用名为 Soft Assertion 的东西。在 TestNG 中。

下面是测试代码的清理版本。

import org.testng.annotations.*; 
import static org.testng.Assert.*; 
import org.openqa.selenium.*; 
import org.openqa.selenium.firefox.FirefoxDriver;

public class TestArea { 
    private WebDriver driver; 

    @BeforeClass(alwaysRun = true) 
    public void setUp() throws Exception { 
        System.setProperty("webdriver.gecko.driver", "C:\\Automation\\SeleniumFiles\\Browser Drivers\\geckodriver.exe"); 
        driver = new FirefoxDriver();
    }

    @Test 
    public void Example() throws Exception { 
        driver.get( "http://MyWebsite"); 
        assertTrue(isElementPresent( By.xpath("The Element I want look for ")));
    } 

    @AfterClass(alwaysRun = true) 
    public void tearDown() throws Exception { 
        driver.quit(); 
    }

    private boolean isElementPresent(By by) { 
        try { 
            driver.findElement(by); 
            return true; 
        } catch (NoSuchElementException e) { 
            return false; 
        } 
    } 
}

关于javascript - Selenium 测试未正确失败 - 通过但配置失败而不是 "proper"失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50064482/

相关文章:

javascript - 如何在 redux 中间件中调度一个 Action ?

javascript - 如何使用 JavaScript 限制每个用户弹出一个窗口

java - 当应用程序处于后台时,Firebase 推送通知 Activity 未打开?

java - 在类路径 :/cucumberOptions 中找不到任何功能

python-3.x - 忽略或解决机器人框架中测试自动化的证书警告

java - 如何解决ElementNotInteractableException : Element is not visible in Selenium webdriver?

javascript - 如何在 Windows 上为 ios 构建(react-native)?

java - 为什么 HttpServlet 类被声明为抽象类?

java - 尝试使用paintComponent画一个圆

数组函数中的 JavaScript 组合