《手把手教你》系列技巧篇(二十七)-java+ selenium自动化测试- quit和close的区别(详解教程)

96 篇文章 36 订阅
订阅专栏

1.简介

尽管有的小伙伴或者童鞋们觉得很简单,不就是关闭退出浏览器,但是宏哥还是把两个方法的区别说一下,不然遇到坑后根本不会想到是这里的问题。

2.源码

 本文介绍webdriver中关于浏览器退出操作。driver中有两个方法是关于浏览器关闭,一个叫quit,一个叫close。先来看看看两者的声明描述,请看下面声明文档。

  /**
   * Close the current window, quitting the browser if it's the last window currently open.
   * <p>
   * See <a href="https://w3c.github.io/webdriver/#close-window">W3C WebDriver specification</a>
   * for more details.
   */
  void close();

  /**
   * Quits this driver, closing every associated window.
   */
  void quit();

通过查看以上官方声明文档,可以看出close方法是关闭当前窗口,这个当前如何理解?就是driver实例操作的页面,叫当前。如果当前窗口只有一个tab,那么这个close方法就相当于关闭了浏览器。quit方法就是直接退出并关闭所有关联的tab窗口。所以,close方法一般关闭一个tab,quit方法才是我们认为的完全关闭浏览器方法。为了证明这个,宏哥用一个例子去演示一下。

3.项目实战

打开度娘,然后打开新闻首页,执行关闭浏览器的操作,看看close和quit的区别。

3.1代码设计

3.2参考代码
package lessons;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

/**
 * @author 北京-宏哥
 * 
 * 《手把手教你》系列技巧篇(二十七)-java+ selenium自动化测试- quit和close的区别(详解教程)
 *
 * 2021年9月14日
 */
public class CloseQuit {
    
    public static void main(String[] args) throws Exception {
        
        System.setProperty("webdriver.chrome.driver", ".\\Tools\\chromedriver.exe");
        
        WebDriver driver = new ChromeDriver();
        driver.manage().window().maximize();
        
        driver.get("https://www.baidu.com");
        Thread.sleep(5000);
        //By linkText 查找元素
        driver.findElement(By.partialLinkText("新闻")).click();
        Thread.sleep(1000);
    
        driver.close();
        Thread.sleep(1000);
        driver.quit();
    }

}
3.3运行代码

1.运行代码,右键Run AS->java Application,控制台输出,

close方法在quit方法前边,控制台如下图所示:

close方法在quit方法后边,控制台如下图所示:

2.通过打断点给最后两行代码,分别运行,观察这两种方法的实际效果。当代码运行完close方法的时候,由于driver停留在百度首页,所以这个时候关闭了百度首页这个tab,新闻页面并没有关闭。因为新闻页面,driver并没有切换到这个页面,所以不影响。但是当代码运行完quit方法,新闻页面关闭,运行代码后电脑端的浏览器的动作,如下小视频所示:

3.将最后两行代码顺序调换,打上断点继续运行,可以看到,当代码运行完quit方法后,整个浏览器都直接关闭,close方法都没来得及运行所有浏览器的session ID就都被quit关闭,当运行到close的方法时候,由于quit将所有页面(Session ID)都关闭了,close没有页面(Session ID)关闭而报错:Session ID is null。。运行代码后电脑端的浏览器的动作,如下小视频所示:

一般来说,我们在自动化测试脚本运行完之后,需要恢复到干净环境,所以,一般都采用driver.quit()来直接关闭浏览器。

4.小结

4.1ChromeDriverService

使用close方法的时候,因为只有百度首页这个tab,所以会关闭浏览器,但是通过查看任务管理器发现,ChromeDriver进程仍存在内存中。如果使用quit方法,整个浏览器都直接关闭,ChromeDriver进程也会被结束。
ChromeDriver是轻量级的服务,在单任务或不需要频繁启动浏览器的情况下,使用driver.quit()关闭浏览器,可以正常结束ChromeDriver进程。若在一个比较大的 测试套件中频繁的启动关闭,会增加一个比较明显的延时导致浏览器进程不被关闭的情况发生,为了避免这一状况我们可以通过ChromeDriverService来控制ChromeDriver进程的生死,达到用完就关闭的效果避免进程占用情况出现(Running the server in a child process)。具体实现如下:

ChromeDriverService service = new ChromeDriverService.Builder() .usingChromeDriverExecutable(new File("E:\\Selenium WebDriver\\chromedriver_win_23.0.1240.0\\chromedriver.exe")).usingAnyFreePort().build();
service.start();
driver = new ChromeDriver();
driver.get("http://www.baidu.com");
driver.quit();
// 关闭 ChromeDriver 接口
service.stop();
4.2close 和 quit区别

close 和 quit区别:close 只会关闭当前浏览器,而quit不仅会关闭浏览器也会杀掉驱动进程。close的问题在于你多次进行调试时,进程中会残留多个驱动进程,这种情况有可能会引起一些其他的问题,建议使用quit。

源码分析,close和quit在发送 HttpRequest 请求时,method 都是DELETE ,但uri不同,如下:

 close的HttpRequest

 

 quit 的HttpRequest

 

shell实例手册
yonggeit的博客
05-27 5999
shell实例手册 1文件{ touch file # 创建空白文件 rm -rf 目录名 # 不提示删除非空目录(-r:递归删除 -f强制) dos2unix # windows文本转linux文本 unix2dos # linux文本转windows文本 enca filename ...
Seleniumquitclose区别
lykio_881210的博客
01-11 6403
Selenium对浏览的关闭操作,在driver中有两种方法:一个是quit,另一个叫close。先来看看看两者的声明描述,请看下面声明文档。 /** * Close the current window, quitting the browser if it's the last window currently open. */ void close(); /**
Selenium执行完毕未关闭chromedriver/geckodriver进程的解决办法(java版+python版)
weixin_33777877的博客
08-29 3541
selenium操作chrome浏览器需要有ChromeDriver驱动来协助。webdriver中关浏览器关闭有两个方法,一个叫quit,一个叫close。 1 /** 2 * Close the current window, quitting the browser if it's the last window currently open. 3 */ 4 ...
selenium之 关闭窗口closequit
热门推荐
灰蓝
08-26 7万+
selenium关闭窗口有两个方法,closequit,我们稍作研究便知道这两个方法的区别。1.看源码或API这是close()的说明: Closes the current window. 关闭当前窗口。 这是quit()的说明: Quits the driver and closes every associated window. 退出驱动并关闭所有关联的窗口。 从这里就
driver.close()和driver.quit()区别
u011771770的专栏
08-31 2162
close关闭tab页 quit()关闭浏览器
selenium中, quitclose区别
最新发布
Ataoker的博客
06-03 473
使用close() 时, 它关闭的是第一个窗口。是因为当前handler 还是一个窗口的。使用close時,只会关闭当前窗口,最后新闻页会。
软件面试|driver调用quit方法和调用close方法的区别
Tester_muller的博客
12-27 586
关闭所有的浏览器窗口,销毁driver操作,则需要使用的是quit方法;当打开了多个窗口,只想要关闭非最后一个窗口的时候,使用的是close方法。使用driver调用quit和调用close区别是什么?在UI自动化中怎样进行浏览器的关闭操作?
selenium里面driver.close和driver.quit区别
m0_47311030的博客
06-06 3784
先说一下driver.close和driver.quit区别,然后用代码实现,一目了然。 driver.close()是关闭单个浏览器窗口; driver.quit()是关闭所有的浏览器窗口; 下面以打开百度首页,然后开多个窗口来演示这两个的区别: from selenium import webdriver import time driver = webdriver.Chrome() url = r"https://www.baidu.com" #打开百度网址 driver.get(url) tim
driver.close()和driver.quit()
吉祥龙龙的博客
04-15 3588
driver.close()关闭当前窗口 driver.quit()退出驱动关闭所有窗口 from selenium import webdriver from time import sleep driver = webdriver.Chrome() driver.get('http://sahitest.com/demo/index.htm') print(driver.current...
driver.close() VS. driver.quit()
m936956的博客
05-29 352
Id Detail driver.quit() It basically calls driver.dispose() method which in turn clos...
selenium框架中driver.close()和driver.quit()关闭浏览器
01-21
Windows系统上,每次运行完selenium程序后,chromedriver.exe进程总是不能彻底关闭。 网上参考了如下文章:https://www.jb51.net/article/201622.htm selenium操作chrome浏览器需要有ChromeDriver驱动来协助。webdriver中关浏览器关闭有两个方法,一个叫quit,一个叫close。 /** * Close the current window, quitting the browser if it's the last window currently open. */ void close(); /*
Selenium自动关闭窗口和关闭浏览器的方法(closequit
分享式获得也是一种学习的态度
05-14 1594
每个人都有惰性,但不断学习是好好生活的根本,共勉!
selenium--quit()与close()的区别
doulihang的博客
03-07 1197
webdriver提供了quit()和close()两种关闭的方法,这两种方法有什么不同呢。quit():退出相关驱动程序,关闭所有窗口close():关闭当前窗口打开百度首页,点击新闻链接,再点击个性推荐链接,此时会打开新的窗口,显示个性推荐页面。我们看看quitclose区别#coding=utf-8 from selenium import webdriver import time ...
seleniumquit()和close()的区别
ihuangtian的博客
03-13 6025
首先我们先来看看两个方法的声明文档 /** * Close the current window, quitting the browser if it's the last window currently open. * 关闭当前窗口,如果它是当前打开的最后一个窗口,则退出浏览器 */ void close(); /** * Quits this dr...
selenium关闭浏览器close()与quit()
木下瞳的博客
12-21 5091
了解更多关注微信公众号“木下学Python”吧~ close方法是,关闭当前窗口,这个当前,如何理解,就是driver实例操作的页面,叫当前。如果当前窗口只有一个tab,那么这个close方法就相当于关闭了浏览器。quit方法就是直接退出并关闭所有关联的tab窗口。所以,close方法一般关闭一个tab,quit方法才是我们认为的完全关闭浏览器方法 ...
420
原创
9286
点赞
7668
收藏
1万+
粉丝
关注
私信
写文章

热门文章

  • 《手把手教你》系列基础篇之(一)-java+ selenium自动化测试-环境搭建(上)(详细教程) 5169
  • 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(6)-Charles安卓手机抓包大揭秘 3398
  • 《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(11)-Fiddler设置安卓手机抓包,不会可是万万不行的! 2794
  • python接口自动化(十)--post请求四种传送正文方式(详解) 2791
  • 《吐血整理》高级系列教程-吃透Fiddler抓包教程(33)-Fiddler如何抓取WebSocket数据包 2671

分类专栏

  • 人在囧途 2篇
  • Jenkins 2篇
  • MySQL数据库 2篇
  • Pycharm 1篇
  • Allure 4篇
  • WireShark 5篇
  • TestNG 12篇
  • python+playwright自动化测试 67篇
  • Fiddler抓包教程 35篇
  • python接口自动化 40篇
  • Java+Playwright自动化测试 7篇
  • Python+Appium自动化测试 41篇
  • Charles 16篇
  • python+selenium自动化测试 27篇
  • Jmeter使用教程 55篇
  • java+selenium自动化测试 96篇
  • MySQL 2篇

最新评论

  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-4-playwright等待浅析

    北京-宏哥: 在Playwright中,‌slow_mo参数主要用于控制操作之间的延迟,‌以便于观察或调试。‌ 在您提到的情况下,‌即使将slow_mo设置为100,‌启动Firefox的时间仍然是9秒,‌这表明slow_mo参数并没有对启动时间产生显著影响。‌这可能是因为启动时间主要受其他因素影响,‌比如浏览器的初始化过程、‌系统资源的使用情况等。‌ 要解决启动时间问题,‌可以尝试以下几个方法:‌ 优化启动配置:‌检查是否有不必要的浏览器启动参数,‌或者是否可以通过调整浏览器的启动配置来加快启动速度。‌ 检查系统资源:‌确保系统资源充足,‌没有其他大量消耗资源的进程在运行。‌ 更新Playwright和浏览器:‌确保Playwright和浏览器都是最新版本,‌有时候新版本会修复一些性能问题。‌ 考虑使用其他浏览器:‌如果Firefox的启动速度一直不能满足需求,‌可以考虑使用其他浏览器,‌比如Chrome或Edge,‌看是否会有所改善。‌ 此外,‌如果启动Firefox时遇到了特定的问题,‌比如防火墙设置、‌网络配置等,‌也可能影响启动时间。‌确保这些设置是正确的,‌也可以帮助提升启动速度。‌例如,‌如果防火墙设置不当,‌可能会导致浏览器加载速度变慢。‌在这种情况下,‌可以通过调整防火墙设置或者将浏览器添加到防火墙的白名单中来解决。‌ 总的来说,‌虽然slow_mo参数主要用于调试目的,‌但它并不直接影响浏览器的启动时间。‌解决启动时间问题可能需要从其他方面入手,‌比如优化启动配置、‌检查系统资源、‌更新软件版本等。‌

  • Jmeter(十九) - 从入门到精通 - JMeter监听器 -上篇(详解教程)

    朤月龘龖: 新手小白发问,后端监视器,上面图片和下面的解释怎么对应不起来啊,那个英文不一样呢?意思是一样的吗?

  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-4-playwright等待浅析

    SpiderAiDavid: 宏哥,请教下: browser = p.firefox.launch(headless=False, slow_mo=100) 在window下启动火狐需要9s, slow_mo去掉也是9s, 有解决思路吗?

  • 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(2)-charles安装激活(Mac)最新简单教程【亲测有效】

    北京-宏哥: 有啊,有激活工具,自己用工具获取注册码

  • 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(2)-charles安装激活(Mac)最新简单教程【亲测有效】

    画中有画: 北京宏哥公众号上根本就没有charles注册码

最新文章

  • 《人在囧途》系列 - 都说“三百六十行,行行转码农”0基础转行程序员 路该怎么走?
  • 《人在囧途》系列 - 我30岁了,转行学编程可以吗? 排除法告诉你答案
  • MySQL基础知识(二)-超详细 Linux安装MySQL5.7完整版教程及遇到的坑
2024
08月 38篇
07月 54篇
06月 50篇
05月 46篇
04月 51篇
03月 52篇
02月 32篇
01月 56篇
2023年21篇
2022年18篇
2020年2篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家十二生肖玻璃钢雕塑制作过程牛年商场创意美陈肇庆玻璃钢动物雕塑推荐货源广西小区玻璃钢雕塑加工海口市玻璃钢雕塑定制无锡杯子型玻璃钢花盆玻璃钢雕塑标准 规范湖州玻璃钢仿铜雕塑吕梁玻璃钢花盆怒江玻璃钢雕塑南平城市玻璃钢雕塑马鞍山动物玻璃钢雕塑多少钱德州价值观玻璃钢雕塑厂家宜春户外玻璃钢雕塑联系方式仙桃玻璃钢门头雕塑浙江水果玻璃钢雕塑制作二七玻璃钢雕塑楚雄玻璃钢雕塑零售玻璃钢梨雕塑上海常见商场美陈费用河北走廊商场美陈批发南昌大型玻璃钢雕塑多少钱玻璃钢雕塑有裂纹吗榆林公园玻璃钢雕塑定做武威玻璃钢植物雕塑定做玻璃钢雕塑值钱吗浙江通道商场美陈现价古代玻璃钢卡通雕塑怎么样电镀玻璃钢雕塑定做玉溪玻璃钢雕塑安装香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化