簡體   English   中英

如何關閉瀏覽器?

[英]How to close browser?

,我正在學習編程,但我遇到了問題。 我只想打開一個瀏覽器然后關閉它,但是...我的程序打開兩個瀏覽器然后關閉一個。

黃瓜鈎:

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:您忽略了 Java 風格約定並聲明了名稱以大寫字母開頭的方法和變量。 這會導致問題:

  1. 它會導致其他可能會幫助您的人直接走開。 Java 專家不喜歡閱讀其他人的“臭”代碼。

  2. 它會導致各種概念錯誤。 例如,

     Close.CloseDriver();

    看起來像一個靜態方法的調用。 但事實並非如此。 為什么這是個問題? 好吧,如果您編寫令人困惑的代碼,就會使人們感到困惑。 肯定是其他人,也可能是你自己。

您確實需要閱讀/理解/遵循 Java 樣式約定。 特別是如果您希望其他人閱讀您的代碼。

問題#2:在我看來,您似乎沒有考慮過包裝器對象的用途和生命周期; ChromeControllerHooks 如果你做得正確,在你的單元測試中抽象通用代碼是沒問題的。 但是,如果您對抽象需要如何工作沒有清晰的心理模型,那么最好編寫簡單的重復代碼。


現在到實際問題。 由於上述 2 個問題,我不確定我是否正確閱讀了您的代碼,但在我看來問題出在這里:

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

好的,您正在關閉ChromeDriver 但哪一個?

答:您正在關閉在上一條語句中實例化時創建的驅動程序。 這是一個與您的Initialize方法設置的ChromeDriver實例不同的實例。

解決方案:我的建議是丟棄該代碼並重新開始:

  • 決定每個類的目的是什么,每個方法應該做什么,以及它們將如何使用。 我強烈懷疑您實際上只需要一門課。

  • 嚴格遵守標准的 Java 標識符約定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM