다른 브라우저에서 테스트 케이스 (XML 파일의 테스트 태그)를 병렬로 실행할 수있는 프레임 워크를 만들려고합니다. testNG 주석의 모든 조합을 사용하여 시도했지만 블로그를 읽은 후에 testNg listners를 사용하여 블로그를 얻을 수 있음을 알게되었습니다. ThreadLocal을 사용하여 드라이버를 스레드로부터 안전하게 유지합니다. LocalDriverManager.getDriver()에서 테스트 케이스 클래스의 Webdriver에 액세스하려고 할 때 null 포인터 예외가 발생합니다. get (url); 아래 시나리오에서 Selenium Webdriver 인스턴스에 액세스하려고 할 때 NullPointerException이 발생합니다.
이
은 LocalBrowserFactory.Classpackage BrowserFactory;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import DataProvider.ConfigDataProvider;
public class LocalDriverFactory {
public static WebDriver createInstance(String browserName) {
WebDriver driver = null;
ConfigDataProvider config=new ConfigDataProvider();
if (browserName.toLowerCase().contains("firefox")) {
System.setProperty("webdriver.gecko.driver", config.getgeckoPath());
driver = new FirefoxDriver();
}
if (browserName.toLowerCase().contains("internet")) {
driver = new InternetExplorerDriver();
}
if (browserName.toLowerCase().contains("chrome")) {
System.setProperty("webdriver.chrome.driver", config.getchromePath());
driver = new ChromeDriver();
}
driver.manage().window().maximize();
return driver;
}
}
입니다 이것은 내 LocalDriverManager.class
package BrowserFactory;
import org.openqa.selenium.WebDriver;
public class LocalDriverManager {
private static ThreadLocal<WebDriver> webDriver = new ThreadLocal<WebDriver>();
public static WebDriver getDriver() {
return webDriver.get();
}
public static void setWebDriver(WebDriver driver) {
webDriver.set(driver);
}
}
입니다 이것은 내 ConfigPropertyReader.class
package DataProvider;
import java.io.File;
import java.io.FileInputStream;
import java.util.Properties;
public class ConfigDataProvider {
static Properties p;
public ConfigDataProvider()
{
File f =new File("C:/Eclipse/parallelframework/configuration/config.properties");
try {
FileInputStream fis = new FileInputStream(f);
p=new Properties();
p.load(fis);
}
catch (Exception e)
{
System.out.println("Custom Exception- cannot load properties file"+e.getMessage());
}
}
public String getvalue(String key)
{
return p.getProperty(key);
}
public String getUrl()
{
return p.getProperty("url");
}
public String getchromePath()
{
return p.getProperty("chromepath");
}
public String getgeckoPath()
{
return p.getProperty("firefoxpath");
}
public String getIEPath()
{
return System.getProperty("User.dir")+p.getProperty("IEPath");
}
}
인이
,691 WebDriverListner.class입니다package Listners;
import org.openqa.selenium.WebDriver;
import org.testng.IInvokedMethod;
import org.testng.IInvokedMethodListener;
import org.testng.ITestResult;
import BrowserFactory.LocalDriverFactory;
import BrowserFactory.LocalDriverManager;
public class WebDriverListner implements IInvokedMethodListener {
public void afterInvocation(IInvokedMethod method, ITestResult testResult) {
if (method.isTestMethod()) {
String browserName = method.getTestMethod().getXmlTest().getLocalParameters().get("browserName");
System.out.println(browserName);
WebDriver driver = LocalDriverFactory.createInstance(browserName);
LocalDriverManager.setWebDriver(driver);
System.out.println("Driver Set");
}
}
public void beforeInvocation(IInvokedMethod method, ITestResult testResult) {
if (method.isTestMethod()) {
WebDriver driver = LocalDriverManager.getDriver();
if (driver != null) {
driver.quit();
}
}
}
}
이
package tests;
import org.openqa.selenium.WebDriver;
import org.testng.annotations.Test;
import BrowserFactory.LocalDriverManager;
public class sampleTest {
@Test
public void testMethod1() {
invokeBrowser("http://www.ndtv.com");
}
@Test
public void testMethod2() {
invokeBrowser("http://www.facebook.com");
}
private void invokeBrowser(String url) {
LocalDriverManager.getDriver().get(url);
}
}
afterInvocation 및 beforeInvocation 메서드의 이름을 전환해야하는 것으로 보입니다. – Grasshopper
이 줄에서 LocalDriverManager.getDriver(). get (url); 귀하의 코드에 따라 webDriver.get()을 반환하는 getDriver가 있으므로 LocalDriverManager.webDriver.get(). get (url)이되어 혼란 스럽습니다. 나는 문제가 여기에 있다고 생각한다. 또는 코드의이 부분을 넣어야합니다. WebDriver driver = null; LocalDriverFactory 클래스 바깥 –