如何关闭浏览器?

时间:2018-02-24 22:12:25

标签: java selenium cucumber hook qa

,我正在学习编程,我有问题。我想只打开一个浏览器并关闭它,但是......  我的程序打开两个浏览器并关闭一个。

黄瓜钩:

public class Hooks {


@Before
public void Initalize() {
    Chrome ChromeRun = new Chrome();
    ChromeRun.StartChrome().get(Config.baseURL);
    System.out.println("BEFORE SCENARIO");

}

@After
public void TearDown() {
    Controller Close = new Controller();
    Close.CloseDriver();

}

头等舱:

public class Chrome {


public WebDriver StartChrome() {
    System.setProperty("webdriver.chrome.driver", Config.ChromePath);
    ChromeDriver driver = new ChromeDriver();
    driver.manage().window().maximize();
    return driver;
}

第二课:

public class Controller {

Chrome Chrome = new Chrome();
public WebDriver driver = Chrome.StartChrome();

public void CloseDriver() {
    try {
        driver.quit();
    } catch (Exception e) {
        System.out.println(":: WebDriver stop error");
    }
    driver = null;
    System.out.println(":: WebDriver stopped");

}

也许我这样做有错误的想法? 我尝试在课堂部分分享项目。

1 个答案:

答案 0 :(得分:1)

问题#1:您忽略Java样式约定并声明名称以大写字母开头的方法和变量。这会导致问题:

  1. 这会让其他可能帮助你的人简单地走开。 Java专家不喜欢阅读其他人的“臭”代码。

  2. 它会导致各种概念错误。例如,

      Close.CloseDriver();
    

    看起来像是静态方法的调用。但事实并非如此。为什么这是个问题?好吧,如果你编写令人困惑的代码,你会混淆人们。其他人肯定,也可能是你自己。

  3. 您确实需要阅读/理解/遵循Java样式约定。特别是如果您希望其他人阅读您的代码。

    问题#2:它看起来像你没有考虑过包装器对象的目的和生命周期;即ChromeControllerHooks。如果正确执行,抽象单元测试中的常用代码就可以了。但是如果你没有清晰的心理模型来描述你的抽象需要如何工作,你最好编写简单的重复代码。

    现在到了实际问题。由于上面的两个问题,我不确定我是否正确地阅读了您的代码,但它在我看来问题就在这里:

    @After
    public void TearDown() {
        Controller Close = new Controller();
        Close.CloseDriver();
    }
    

    好的,您正在关闭ChromeDriver。但是哪一个?

    答案:您正在关闭在上一个语句中实例化时创建的驱动程序。这是与ChromeDriver方法设置的实例不同的Initialize实例。

    解决方案:我的建议是抛弃该代码并重新开始:

    • 决定每个课程的用途,每个方法应该做什么,以及如何使用它们。我强烈怀疑你实际上只需要一堂课。

    • 坚持严格标准Java标识符约定。