当我在我的selenium框架中重新打开Chrome浏览器时,我得到的chrome没有正确关闭错误消息。
在框架中我使用以下代码在每个测试用例的开头打开浏览器实例
if (browserType.equalsIgnoreCase("Chrome")) {
try {
System.setProperty("webdriver.chrome.driver", curProj+"\\drivers\\chromedriver.exe");
ChromeOptions options = new ChromeOptions();
options.setExperimentalOption("useAutomationExtension", false);
options.addArguments("disable-infobars");
//options.addArguments("user-data-dir=C:/Users/xw20/AppData/Local/Google/Chrome/User Data");
options.addArguments(chromeProfile);
webdriver = new ChromeDriver(options);
logger.info("getWebDriver - Setting webdriver.chrome.driver system property as: " + System.getProperty("webdriver.chrome.driver"));
}
catch(IllegalStateException e) {
logger.error("The path to the driver executable must be set by the webdriver.chrome.driver system property. ",e.fillInStackTrace());
throw new IllegalStateException("The path to the driver executable must be set by the webdriver.chrome.driver system property.");
}
并使用以下代码在最后结束
driver.close();
driver.quit();
但是当我为第二个测试用例打开浏览器时,我得到“chrome没有正确关闭”弹出消息。
我尝试在chrome配置文件的首选项文件中更新以下但没有运气
exit_type:Crashed
exited_cleanly:true
配置:
Chrome版本:版本64.0.3282.186(官方版本)(32位)
Selenium版本: 3.11.0
答案 0 :(得分:2)
根据您的代码,在不知道您的框架结构的情况下分析错误 chrome没有正确关闭背后的原因是很困难的。也许有关如何调用代码块的更多细节(即 main()或 TestNG )可能对我们有所帮助。
话虽如此,仍有一些因素需要考虑如下:
当您使用现有的 Chrome个人资料通过 user-data-dir 按照文档ChromeDriver - WebDriver for Chrome 路径应该指向配置文件目录,如下所示:
options.add_argument("user-data-dir=C:/Users/xw20/AppData/Local/Google/Chrome/User Data/Profile 2")
driver.close();
并始终在driver.quit()
方法中调用tearDown(){}
来关闭&正常销毁 WebDriver 和 Web客户端实例。@Test
。答案 1 :(得分:1)
您是否设置了exit_type:Normal,我目前正在测试开始之前,测试结束之后或可以正常工作。 在C#
public static void FixChromeSingleProfile(string dataDir)
{
FileStream fs = new FileStream(dataDir, FileMode.OpenOrCreate);
StreamReader sr = new StreamReader(fs);
string json = sr.ReadToEnd();
sr.Close();
fs.Close();
dynamic jsonDe = JsonConvert.DeserializeObject(json);
if (jsonDe.profile.exit_type != "Normal")
{
jsonDe.profile.exit_type = "Normal";
string r = JsonConvert.SerializeObject(jsonDe);
StreamWriter sw = new StreamWriter(dataDir, false);
sw.Write(r);
sw.Close();
}
}
答案 2 :(得分:0)
此解决方案在Python中运行,并且100%有效,但是您也应该能够在Java中实现此解决方案。每当我使用完Selenium时,我就只调用close_windows
函数。
def close_windows():
windows = driver.window_handles
for w in windows:
driver.switch_to.window(w)
driver.close()
driver.quit()
close_windows()