当前位置: 首页 > 知识库问答 >
问题:

如何关注firefox驱动程序和TestNG实现ITestListener

傅正阳
2023-03-14

我将非常感谢您在这里提供的任何建议。我试图通过使用TestNG和实现ITestListerner接口来使用POM框架中的driver对象。

public class TestNGListener implements ITestListener {

@Override
public void onFinish(ITestContext result) {


    WebDriver driver = BrowserFactory.LanuchBrowser("firefox", "http://10.207.182.108:81/opencart/");
    Util.takescreenshot(driver, result.getName());


}
public class BrowserFactory {

static WebDriver driver;

    public  static WebDriver LanuchBrowser(String Brwsr, String URL){

        System.out.println(Brwsr.toLowerCase());
        switch (Brwsr.toLowerCase()){

            case "firefox":
                        driver=new FirefoxDriver();
                        break;
            case "chrome":
                        driver= new ChromeDriver();
                        System.setProperty("WebDriver.chrome.driver", "chromedriver.exe");
                        break;

            case "internet explorer":
                        System.out.println("IE");
                        driver= new InternetExplorerDriver();
                        System.setProperty("WebDriver.IE.driver","IEDriverServer.exe");
                        break;
            default:
                        System.out.println("Please select one of the Browsers listed : Chrome,Firefox or InternetExplorer");
                        break;
        }   


            driver.manage().window().maximize();
            driver.get(URL);                    


        return driver;

    }
}

下面是我抓取截图的方法

public class Util {

final static Logger logger = Logger.getLogger(Util.class);      

public static void validatePgeNavgtn(WebDriver driver, String PgeTitle){
    PropertyConfigurator.configure("log4j.properties");


    String pgtitle=driver.getTitle();

    if (pgtitle.equalsIgnoreCase(PgeTitle)){
    logger.info("title matched");       
    } 
}

public static void takescreenshot(WebDriver driver, String screen){
    TakesScreenshot ts = (TakesScreenshot)driver;
    File src=  ts.getScreenshotAs(OutputType.FILE);
    try {
        FileUtils.copyFile(src, new File("./Screenshot/"+screen+".png"));
    } catch (IOException e) {
        logger.warn(e.getMessage());
    }
}

请您建议一种方法,下面的方法不应该启动一个新的浏览器会话,而应该将焦点保留在第一个浏览器实例上&同时捕获一个屏幕截图

共有1个答案

轩辕庆
2023-03-14

您需要将BrowserFactory类创建为singleton,这样将创建始终给定BrowserFactory的单个实例,如下所示:-

public class BrowserFactory {

    private WebDriver driver;
    private static BrowserFactory browserFactoryInstance = null;

    private BrowserFactory(String Brwsr, String URL) {

        System.out.println(Brwsr.toLowerCase());
        switch (Brwsr.toLowerCase()) {

        case "firefox":
            this.driver = new FirefoxDriver();
            break;
        case "chrome":
            System.setProperty("WebDriver.chrome.driver", "chromedriver.exe");
            this.driver = new ChromeDriver();
            break;

        case "internet explorer":
            System.out.println("IE");
            System.setProperty("WebDriver.IE.driver", "IEDriverServer.exe");
            this.driver = new InternetExplorerDriver();
            break;
        default:
            System.out
                    .println("Please select one of the Browsers listed : Chrome,Firefox or InternetExplorer");
            break;
        }

        this.driver.manage().window().maximize();
        this.driver.get(URL);

    }

    public static BrowserFactory getInstance(String Brwsr, String URL) {
        if(browserFactoryInstance == null) {
            browserFactoryInstance = new BrowserFactory(Brwsr, URL);
        }
        return browserFactoryInstance;
    }

    public WebDriver getDriver() {
        return this.driver;
    }
}

现在您可以获得WebDriver实例,如下所示:-

//It will return always single instance per test run
WebDriver driver = BrowserFactory.getInstance("firefox", "http://10.207.182.108:81/opencart/").getDriver();
Util.takescreenshot(driver, result.getName());
 类似资料:
  • 为什么命令不会显示在我的上?每次我在test中输入Selenium Web驱动程序命令时,它与其他使用- 驱动程序的下拉列表。没有出现,只显示它是一个班...有什么建议吗?

  • 当我尝试用Selenium 3.14、3.13或3.12启动WebDriver时,我得到 “org.openqa.selenium.remote.UnreachableBrowserException:无法启动新会话。可能的原因是远程服务器的地址无效或浏览器启动失败。”错误。 我可以用旧的Selenium版本运行测试而没有错误。我已经设置了环境变量(例如webdriver.chrome.drive

  • 我使用Firefox驱动程序编写了许多Selenium测试,效果很好。但由于某些原因,我现在在尝试实例化Firefox驱动程序时遇到了一个异常。有人知道Firefox的任何更新可能会影响这一点吗? 下面是两行代码。异常发生在第2行:- 以下是我得到的例外情况:- “WebDriver.dll中出现“OpenQA.Selenium.WebDriverException”类型的异常,但未在用户代码中处

  • 对于ex,当我的chrome放在Compand提示符中时,会给出路径-/applications/google\chrome.app system.setproperty(“webdriver.chrome.driver”,“/applications/google/chrome.app”);WebDriver driver=new ChromeDriver(); driver.get(“http

  • 我正在使用SeleniumWebDriver进行网站测试。现在我想在SeleniumWebDriver中设置TestNG。怎么可能呢?testng有JAR文件吗?

  • 问题内容: 我有一个包含用户信息的数据库,我想创建一个公共静态变量,以便在任何给定时间返回数据库整数,而不必为每个整数都做一个空,但这给了我这个错误: 这是我的代码: 有人知道我在做什么错吗?我尝试使用Google的东西,但是更改代码将我从一个错误转移到了另一个错误…因此,我现在还不确定。 我正在运行JDBC驱动程序sqlite-jdbc-3.8.11.2.jar 问题答案: 未实现。我想你只是想