您好我仍然是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
当测试可以找到元素时,我不会遇到配置问题。
非常感谢
答案 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;
}
}
}