硒测试未正确失败 - 通过配置失败而不是"正确"失败

时间:2018-04-27 14:23:29

标签: 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]但找到[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(未知来源)at   sun.reflect.DelegatingMethodAccessorImpl.invoke(未知来源)at   java.lang.reflect.Method.invoke(未知来源)at   org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:124)     在   org.testng.internal.MethodInvocationHelper.invokeMethodConsideringTimeout(MethodInvocationHelper.java:59)     在   org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:455)     在org.testng.internal.Invoker.invokeConfigurations(Invoker.java:222)     在org.testng.internal.Invoker.invokeConfigurations(Invoker.java:142)     在   org.testng.internal.TestMethodWorker.invokeAfterClassMethods(TestMethodWorker.java:214)     在   org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)     在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 at   org.testng.SuiteRunner.privateRun(SuiteRunner.java:415)at 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 at   org.testng.TestNG.runSuitesLocally(TestNG.java:1137)at 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)     在org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:251)     在org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:77)

     

PASSED:示例

     

===============================================       默认测试       测试运行:1,失败:0,跳过:0

     

配置失败:1,跳过:0

     

===============================================默认套件总测试运行:1,失败:0,跳过:0配置失败:1,跳过:

     

0

当测试可以找到元素时,我不会遇到配置问题。

非常感谢

1 个答案:

答案 0 :(得分:1)

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

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

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

因此,您不需要在assertTrue()块内打包try..catch。如果您想要遍历所有断言并且最后测试方法失败,那么您应该在TestNG中使用名为Soft Assertion的内容。

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

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; 
        } 
    } 
}