[英]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 風格約定並聲明了名稱以大寫字母開頭的方法和變量。 這會導致問題:
它會導致其他可能會幫助您的人直接走開。 Java 專家不喜歡閱讀其他人的“臭”代碼。
它會導致各種概念錯誤。 例如,
Close.CloseDriver();
看起來像一個靜態方法的調用。 但事實並非如此。 為什么這是個問題? 好吧,如果您編寫令人困惑的代碼,就會使人們感到困惑。 肯定是其他人,也可能是你自己。
您確實需要閱讀/理解/遵循 Java 樣式約定。 特別是如果您希望其他人閱讀您的代碼。
問題#2:在我看來,您似乎沒有考慮過包裝器對象的用途和生命周期; 即Chrome
、 Controller
和Hooks
。 如果你做得正確,在你的單元測試中抽象通用代碼是沒問題的。 但是,如果您對抽象需要如何工作沒有清晰的心理模型,那么最好編寫簡單的重復代碼。
現在到實際問題。 由於上述 2 個問題,我不確定我是否正確閱讀了您的代碼,但在我看來問題出在這里:
@After
public void TearDown() {
Controller Close = new Controller();
Close.CloseDriver();
}
好的,您正在關閉ChromeDriver
。 但哪一個?
答:您正在關閉在上一條語句中實例化時創建的驅動程序。 這是一個與您的Initialize
方法設置的ChromeDriver
實例不同的實例。
解決方案:我的建議是丟棄該代碼並重新開始:
決定每個類的目的是什么,每個方法應該做什么,以及它們將如何使用。 我強烈懷疑您實際上只需要一門課。
嚴格遵守標准的 Java 標識符約定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.