Java 失败的配置:@AfterMethod tearDown

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/22204211/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 14:17:47  来源:igfitidea点击:

FAILED CONFIGURATION: @AfterMethod tearDown

javaselenium-webdrivertestng

提问by Learner

iam new to selenium webdriver. iam trying to run a Testng Test Parellel on two browsers but iam struck, getting the Following error. when trying to run.

我是 selenium webdriver 的新手。我试图在两个浏览器上运行 Testng Test Parellel,但我被击中了,收到以下错误。尝试跑步时。

package rough;


import org.testng.annotations.AfterMethod;
import org.testng.annotations.Optional;
import org.testng.annotations.Parameters;
import org.testng.annotations.Test;
import org.testng.annotations.BeforeMethod;
import org.testng.Assert;

import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;

import org.junit.*;

import static org.hamcrest.CoreMatchers.*;

import org.openqa.selenium.*;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.support.ui.Select;

public class Browsers {
  private WebDriver driver;
  private String baseUrl;
  private boolean acceptNextAlert = true;
  private StringBuffer verificationErrors = new StringBuffer();

  @BeforeMethod
  public void tearDown1() throws Exception {
        System.out.println("Hello starting");
  }
  @Parameters("BROWSER")
public void setUp(@Optional String BROWSER) throws Exception {

    //To run test case parallely in different browsers
            if(BROWSER.equalsIgnoreCase("FF"))
            {
            //System.out.println(“Firefox driver would be used”);
            driver = new FirefoxDriver();
            }
            else
            if(BROWSER.equalsIgnoreCase("IE"))
            {
            //System.out.println(“Ie webdriver would be used”);
                System.setProperty("webdriver.ie.driver", "g:/Selenium Jar Files/IEDriverServer.exe");
            driver = new InternetExplorerDriver();
            }

   // driver = new FirefoxDriver();
    baseUrl = "http://book.theautomatedtester.co.uk/";
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
  }

  @Test
  public void test() throws Exception {
    driver.get(baseUrl + "/chapter1");
    driver.findElement(By.id("radiobutton")).click();
    new Select(driver.findElement(By.id("selecttype"))).selectByVisibleText("Selenium RC");
  }

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

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

  private boolean isAlertPresent() {
    try {
      driver.switchTo().alert();
      return true;
    } catch (NoAlertPresentException e) {
      return false;
    }
  }

  private String closeAlertAndGetItsText() {
    try {
      Alert alert = driver.switchTo().alert();
      String alertText = alert.getText();
      if (acceptNextAlert) {
        alert.accept();
      } else {
        alert.dismiss();
      }
      return alertText;
    } finally {
      acceptNextAlert = true;
    }
  }
}

below is the XML

下面是 XML

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite" parallel="True">
  <test name="Test">
  <parameter name = "BROWSER" value="FF"></parameter>
    <classes>
          <class name="rough.Browsers"/>
    </classes>
    <test name="Test">
    <parameter name = "BROWSER" value="IE"></parameter>
    <classes>
       <class name="rough.Browsers"/>
    </classes>
  </test> <!-- Test -->
</suite> <!-- Suite -->

Iam getting the stack trace

我正在获取堆栈跟踪

[TestNG] Running:
  C:\Users\Administrator\AppData\Local\Temp\testng-eclipse--757511090\testng-customsuite.xml

Hello starting
FAILED CONFIGURATION: @AfterMethod tearDown
java.lang.NullPointerException
    at rough.Browsers.tearDown(Browsers.java:65)
    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:84)
    at org.testng.internal.Invoker.invokeConfigurationMethod(Invoker.java:564)
    at org.testng.internal.Invoker.invokeConfigurations(Invoker.java:213)
    at org.testng.internal.Invoker.invokeMethod(Invoker.java:786)
    at org.testng.internal.Invoker.invokeTestMethod(Invoker.java:901)
    at org.testng.internal.Invoker.invokeTestMethods(Invoker.java:1231)
    at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:127)
    at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:111)
    at org.testng.TestRunner.privateRun(TestRunner.java:767)
    at org.testng.TestRunner.run(TestRunner.java:617)
    at org.testng.SuiteRunner.runTest(SuiteRunner.java:334)
    at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:329)
    at org.testng.SuiteRunner.privateRun(SuiteRunner.java:291)
    at org.testng.SuiteRunner.run(SuiteRunner.java:240)
    at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:52)
    at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:86)
    at org.testng.TestNG.runSuitesSequentially(TestNG.java:1224)
    at org.testng.TestNG.runSuitesLocally(TestNG.java:1149)
    at org.testng.TestNG.run(TestNG.java:1057)
    at org.testng.remote.RemoteTestNG.run(RemoteTestNG.java:111)
    at org.testng.remote.RemoteTestNG.initAndRun(RemoteTestNG.java:204)
    at org.testng.remote.RemoteTestNG.main(RemoteTestNG.java:175)

Please help me

请帮我

采纳答案by Nathan Merrill

The real error is a NullPointerException. I'm going to guess that somewhere in your setup (or in your test), you throw an error, and then you try to access the driver and it is null.

真正的错误是一个NullPointerException. 我会猜测在您的设置(或您的测试)中的某个地方,您抛出了一个错误,然后您尝试访问驱动程序并且它为空。

Either put a null check before calling driver.close(), or make sure the driver is never null (I like the first option better).

要么在调用之前进行空检查driver.close(),要么确保驱动程序永远不会为空(我更喜欢第一个选项)。

回答by BuBu

I received the same error. My issue was that i tried to quite the driver inside @afterMethod. I closed the driver instead of quitting, and the problem got resolved.

我收到了同样的错误。我的问题是我试图在@afterMethod 中设置驱动程序。我关闭了驱动程序而不是退出,问题得到了解决。

回答by Kushlata

I was facing the same problem and to solve it, I updated the chromedriver into my system. Actually one need to check the compatibility of browser and browser driver.

我遇到了同样的问题,为了解决它,我将 chromedriver 更新到我的系统中。实际上需要检查浏览器和浏览器驱动程序的兼容性。

For example, if I was using Chrome 74 so I would update my driver to support Chrome 64.

例如,如果我使用的是 Chrome 74,那么我会更新我的驱动程序以支持 Chrome 64。