【App自动化测试】(八)三种等待方式——强制等待、隐式等待、显示等待

news2025/8/7 6:08:25

目录

  • 1. 为什么要添加等待?
  • 2. 三种等待方式
  • 3. 强制(直接)等待
  • 4. 隐式等待
    • 4.1 隐式等待说明
    • 4.2 隐式等待无法解决的问题
  • 5. 显式等待
    • 5.1 为什么要使用显示等待机制?
      • 5.1.1 Html文件加载顺序
      • 5.1.2 为什么要使用显示等待机制?
    • 5.2 显示等待用到的两个类——WebDriverWait、expected_conditions
      • 5.2.1 WebDriverWait
        • 5.2.1.1 WebDriverWait的用法
        • 5.2.1.2 WebDriverWait的until()和until_not()方法
      • 5.2.2 expected_conditions 类
      • 5.3 示例
  • 6. 三种等待方式总结


前言
本文为在霍格沃兹测试开发学社中学习到的一些技术写出来分享给大家,希望有志同道合的小伙伴可以一起交流技术,一起进步~ 😘

1. 为什么要添加等待?

添加等待的原因:避免页面未渲染完成后操作,导致的报错。

示例:

#演示代码中未添加任何等待

from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy

class TestXueQiu:
    def setup(self):
        # 创建一个字典
        desire_cap = {}
        # 平台
        desire_cap['platform'] = 'Android'
        #手机系统版本
        desire_cap['platformVersion']= '6.0'
        # 设备名
        desire_cap['deviceName'] = '127.0.0.1:7555'
        # app 包名
        desire_cap['appPackage'] = 'com.xueqiu.android'
        # app 页面名
        desire_cap['appActivity'] = '.common.MainActivity'
        desire_cap['noReset'] = 'true'
        #每次测试重置数据
        desire_cap['skipDeviceInitization']= 'true'
        #保证可以正常输入中文
        desire_cap['unicodeKeyBoard'] = 'true'
        desire_cap['resetKeyBoard'] = 'true'
        self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desire_cap)

    def teardown(self):
        # 回收session
        self.driver.quit()

    def test_api_demo(self):
        self.driver.find_element(AppiumBy.ID, "com.xueqiu.android:id/tv_search").click()
        self.driver.find_element(AppiumBy.ID, "com.xueqiu.android:id/search_input_text").send_keys("alibaba")
        self.driver.find_element(AppiumBy.ID,"com.xueqiu.android:id/code").click()


运行结果:运行报错,报错原因是未找到定位的元素

在这里插入图片描述

2. 三种等待方式

  • 强制等待sleep()(不推荐)
  • 全局隐式等待:driver定义好之后调用的,使用driver的每步操作都在隐式等待时效内完成,如果时效内未完成抛出错误,服务端等待,每隔0.5s查询一次
    • 服务端等待
    • driver.impicitly_wait(TIMEOUT)
  • 显示等待客户端等待,只是在局部生效,为某一个元素操作
    • 客户端等待
    • WebDriverWait(self.drier,10).until(expected_conditions.visibility_of_element_located(LOCATOR))

3. 强制(直接)等待

解决方案:在报错的元素操作之前添加等待

原理:强制等待,线程休眠一定时间

方式time.sleep(3)

示例:

import time
from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy

class TestXueQiu:
    def setup(self):
        # 创建一个字典
        desire_cap = {}
        # 平台
        desire_cap['platform'] = 'Android'
        #手机系统版本
        desire_cap['platformVersion']= '6.0'
        # 设备名
        desire_cap['deviceName'] = '127.0.0.1:7555'
        # app 包名
        desire_cap['appPackage'] = 'com.xueqiu.android'
        # app 页面名
        desire_cap['appActivity'] = '.common.MainActivity'
        desire_cap['noReset'] = 'true'
        #每次测试重置数据
        desire_cap['skipDeviceInitization']= 'true'
        #保证可以正常输入中文
        desire_cap['unicodeKeyBoard'] = 'true'
        desire_cap['resetKeyBoard'] = 'true'
        self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desire_cap)

    def teardown(self):
        # 回收session
        self.driver.quit()

    def test_api_demo(self):
        time.sleep(3)
        self.driver.find_element(AppiumBy.ID, "com.xueqiu.android:id/tv_search").click()
        time.sleep(3)
        self.driver.find_element(AppiumBy.ID, "com.xueqiu.android:id/search_input_text").send_keys("alibaba")
        time.sleep(3)
        self.driver.find_element(AppiumBy.ID,"com.xueqiu.android:id/code").click()

#添加直接等待,每一步操作前会强制等待3秒钟

4. 隐式等待

4.1 隐式等待说明

问题:难以确定元素加载的具体等待时间。

解决方案:针对于寻找元素的这个动作,使用隐式等待添加配置:driver.implicitly_wait(seconds)

原理:隐式等待是一种全局的等待方式,设置一个等待时间,轮询查找(默认 0.5 秒)元素是否出现,如果没出现就抛出异常

示例:

from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy

class TestXueQiu:
    def setup(self):
        # 创建一个字典
        desire_cap = {}
        # 平台
        desire_cap['platform'] = 'Android'
        #手机系统版本
        desire_cap['platformVersion']= '6.0'
        # 设备名
        desire_cap['deviceName'] = '127.0.0.1:7555'
        # app 包名
        desire_cap['appPackage'] = 'com.xueqiu.android'
        # app 页面名
        desire_cap['appActivity'] = '.common.MainActivity'
        desire_cap['noReset'] = 'true'
        #每次测试重置数据
        desire_cap['skipDeviceInitization']= 'true'
        #保证可以正常输入中文
        desire_cap['unicodeKeyBoard'] = 'true'
        desire_cap['resetKeyBoard'] = 'true'
        self.driver = webdriver.Remote("http://127.0.0.1:4723/wd/hub", desire_cap)
        #添加隐式等待:设置一个等待时间,轮询查找(默认0.5秒)元素是否出现,如果没出现就抛出异常
        self.driver.implicitly_wait(3)

    def teardown(self):
        # 回收session
        self.driver.quit()

    def test_api_demo(self):
        self.driver.find_element(AppiumBy.ID, "com.xueqiu.android:id/tv_search").click()
        self.driver.find_element(AppiumBy.ID, "com.xueqiu.android:id/search_input_text").send_keys("alibaba")
        self.driver.find_element(AppiumBy.ID,"com.xueqiu.android:id/code").click()


#在setup中添加了隐式等待。

4.2 隐式等待无法解决的问题

无法解决的问题

  • 元素可以找到,使用点击等操作,出现报错。
  • 可能会导致脚本执行速度整体变慢

原因

  • 页面元素加载是异步加载过程,通常 xml 会先加载完成,相应的元素属性后加载
  • 元素存在与否是由 xml 决定,元素的交互是由属性决定
  • 隐式等待只关注元素能不能找到,不关注元素能否点击或者进行其他的交互

解决方案:使用显式等待。

5. 显式等待

  • 显示等待与隐式等待相对,显示等待必须在每个需要等待的元素前面进行声明。
  • 是针对于某个特定的元素设置的等待时间,在设置时间内,默认每隔一段时间检测一次当前某个元素是否存在。
  • 如果在规定的时间内找到了元素,则直接执行,即找到元素就执行相关操作。
  • 如果超过设置时间检测不到则抛出异常。默认检测频率为0.5s,默认抛出的异常为:NoSuchElementException。

5.1 为什么要使用显示等待机制?

5.1.1 Html文件加载顺序

html文件是自上而下进行加载,并在加载过程完成解析与渲染。大致过程如下:

  1. 首先解析收到的文档,根据文档定义构建一棵 DOM 树,DOM 树是由 DOM 元素及属性节点组成的。遇到图片资源,浏览器也会另外发出一个请求,来获取图片资源。这是异步请求,并不会影响html文档进行加载。但是当文档加载过程中遇到js文件,html文档会挂起渲染(加载解析渲染同步)的线程,不仅要等待文档中js文件加载完毕,还要等待解析执行完毕,才可以恢复html文档的渲染线程。
  2. 然后对 CSS 进行解析,生成 CSSOM 规则树(CSS加载和解析过程都不会阻塞 DOM 的解析,但会阻塞 DOM 渲染)。
  3. DOM和CSSOM全部解析完成后,根据 DOM 树和 CSSOM 规则树构建渲染树。渲染树的节点被称为渲染对象,渲染对象是一个包含有颜色和大小等属性的矩形,渲染对象和 DOM 元素相对应,但这种对应关系不是一对一的,不可见的 DOM 元素不会被插入渲染树。还有一些 DOM 元素对应几个可见对象,它们一般是一些具有复杂结构的元素,无法用一个矩形来描述。
  4. 当渲染对象被创建并添加到树中,它们并没有位置和大小,所以当浏览器生成渲染树以后,就会根据渲染树来进行布局(也可以叫做回流)。这一阶段浏览器要做的事情是要弄清楚各个节点在页面中的确切位置和大小。通常这一行为也被称为“自动重排”。
  5. 布局阶段结束后是绘制阶段,遍历渲染树并调用渲染对象的 paint 方法将它们的内容显示在屏幕上,绘制使用 UI 基础组件。

❗ 注意:html加载的过程是逐步完成的,渲染引擎将会尽可能早的将内容呈现到屏幕上,并不会等到所有的html 都解析完成之后再去构建和布局 render 树。它是解析完一部分内容就显示一部分内容,同时,可能还在通过网络下载其余内容。

5.1.2 为什么要使用显示等待机制?

由于html加载方式,所以过程中内容虽然会呈现在屏幕上,但元素的属性不一定全部被解析。如果此时我们使用元素属性去定位的话,可能会因为属性未被加载好而出现定位失败的情况。

隐式等待可以判断出元素已经出现在dom树中,但是无法盘判断元素属性是否被成功加载。如果使用隐式等待也会出现定位失败的情况。而显示等待可以等待动态加载的ajax元素,因此显示等待可以解决因元素属性未被加载而导致的定位失败。

5.2 显示等待用到的两个类——WebDriverWait、expected_conditions

5.2.1 WebDriverWait

5.2.1.1 WebDriverWait的用法

方法说明 WebDriverWait(driver, timeout, poll_frequency=0.5, ignored_exceptions=None)

参数说明

  • driver:浏览器驱动。
  • timeout:最长超时时间,默认以秒为单位
  • poll_frequency:检测的间隔步长,默认是0.5s
  • ignored_exceptions:超时后的抛出的异常信息,默认抛出NoSuchElementException异常

5.2.1.2 WebDriverWait的until()和until_not()方法

方法说明

  • until( method, message='') :当某元素出现或什么条件成立则继续执行

  • until_not(method, message='') :当mou元素消失或什么条件不成立则继续执行。

参数说明

  • method:在等待时期,每隔一段时间(__init__中的poll_frequency)调用这个传入的方法,知道返回值不是False。
  • message:如果超时,抛出TimeoutException,将message传入异常

5.2.2 expected_conditions 类

  • presence_of_element_located:判断元素是否被加载到dom树里,并不代表元素一定可被定位
    用法WebDriverWait().until(expected_conditions.presence_of_element_located(元素对象))

  • visibility_of_element_located:判断某个元素是否可见,可见代表元素非隐藏,并且元素的宽和高都不等于0.
    用法WebDriverWait().until(expected_conditions.visibility_of_element_located(locator))

  • element_to_be_clickable:判断每个元素是否可点击
    用法WebDriverWait().until(expected_conditions.element_to_be_clickable(locator))

  • ……(其他方法可自行去了解)

5.3 示例

示例1:

from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait


class TestXueQiu:
    def setup(self):
        desired_caps = {}
        desired_caps['platformName'] = 'Android'
        desired_caps['platformVersion'] = '6.0'
        desired_caps['deviceName'] = '127.0.0.1:7555'
        desired_caps['appPackage'] = 'com.xueqiu.android'
        desired_caps['appActivity'] = '.view.WelcomeActivityAlias'
        desired_caps['noReset'] = 'true'
        self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
        #使用隐式等待
        self.driver.implicitly_wait(10)

    def teardown(self):
        self.driver.quit()

    def test_xueqiu(self):
        """
            1、打开 雪球 app
            2、点击搜索输入框
            3、像搜索框中输入“阿里巴巴”
            4、在搜索结果中选择“阿里巴巴”,然后进行点击
            5、获取这只上 阿里巴巴的股价,并判断这只股价的价格<200
            6、断言
            """
        # 定位搜索框并进行点击
        self.driver.find_element(AppiumBy.ID, 'com.xueqiu.android:id/tv_search').click()
        # 搜索框输入“阿里巴巴”
        self.driver.find_element(AppiumBy.ID, 'com.xueqiu.android:id/search_input_text').send_keys("阿里巴巴")
        # 在搜索结果中选择“阿里巴巴”,并且点击
        self.driver.find_element(AppiumBy.XPATH,"//*[@resource-id='com.xueqiu.android:id/name' and @text='阿里巴巴']").click()
        # 获取当前股价
        #元组,元素定位方式和定位值
        cur_price_el=(AppiumBy.ID, 'com.xueqiu.android:id/current_price')
	#使用显示等待,用visibility_of_element_located去判断元素是否加载好
        WebDriverWait(self.driver,10).until(expected_conditions.visibility_of_element_located(cur_price_el))
        #直接使用cur_price_el。元组需要解包所以使用*cur_price_el
        current_price = float(self.driver.find_element(*cur_price_el).text)
        # 断言
        assert current_price < 200

示例2:until中使用lambda表达式来进行查询元素

from appium import webdriver
from appium.webdriver.common.appiumby import AppiumBy
from selenium.webdriver.support import expected_conditions
from selenium.webdriver.support.wait import WebDriverWait


class TestXueQiu:
    def setup(self):
        desired_caps = {}
        desired_caps['platformName'] = 'Android'
        desired_caps['platformVersion'] = '6.0'
        desired_caps['deviceName'] = '127.0.0.1:7555'
        desired_caps['appPackage'] = 'com.xueqiu.android'
        desired_caps['appActivity'] = '.view.WelcomeActivityAlias'
        desired_caps['noReset'] = 'true'
        self.driver = webdriver.Remote('http://127.0.0.1:4723/wd/hub', desired_caps)
        #使用隐式等待
        self.driver.implicitly_wait(10)

    def teardown(self):
        self.driver.quit()

    def test_xueqiu(self):
        """
            1、打开 雪球 app
            2、点击搜索输入框
            3、像搜索框中输入“阿里巴巴”
            4、在搜索结果中选择“阿里巴巴”,然后进行点击
            5、获取这只上 阿里巴巴的股价,并判断这只股价的价格<200
            6、断言
            """
        # 定位搜索框并进行点击
        self.driver.find_element(AppiumBy.ID, 'com.xueqiu.android:id/tv_search').click()
        # 搜索框输入“阿里巴巴”
        self.driver.find_element(AppiumBy.ID, 'com.xueqiu.android:id/search_input_text').send_keys("阿里巴巴")
        # 在搜索结果中选择“阿里巴巴”,并且点击
        self.driver.find_element(AppiumBy.XPATH,"//*[@resource-id='com.xueqiu.android:id/name' and @text='阿里巴巴']").click()
        # 获取当前股价
        cur_price_el=(AppiumBy.ID, 'com.xueqiu.android:id/current_price')
        #until中不使用expected_conditions类,使用lambda函数来进行判断
        WebDriverWait(self.driver,10).until(lambda x:x.find_element(*cur_price_el))
        current_price = float(self.driver.find_element(*cur_price_el).text)
        # 断言
        assert current_price < 200

6. 三种等待方式总结

  • 隐式等待:尽量默认都加上,时间限定在3-6s,不要太长,为了所有的find_element方法都有一个很好的缓冲。
  • 显示等待:用来处理隐式等待无法解决的一些问题,比如:文件上传。文件上传需要设置20s以上,但是如果设置显示等待,它会在每个find方法都等待这么长时间,一旦发现没找到元素,就会等20s后才抛出异常,影响case的执行效率,这时就需要用显示等待,显示等待可以设置的长一点。
  • 强制等待:一般不推荐,前面两种基本能解决大部分问题,如果某个空间灭有任何特征,只能强制等待,这种抢矿比较少。

文末说明:
接口测试中我们很容易混淆Session、cookie和token,你知道他们有什么区别吗?

快来跟我一起看,一篇文章让你了解三者的区别。😎
⬇⬇⬇⬇⬇⬇⬇
👍👍👍:接口测试经典面试题:Session、cookie、token有什么区别?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/34535.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

简化工作和生活的 7 个在线地图制作平台分享

地图制作是数据和艺术的结合&#xff0c;数据可以传达人们想要的信息&#xff0c;而艺术是传达信息的一种方式&#xff0c;两者的正确组合创造了完美的地图。 每个平台在功能和价格方面都是独一无二的&#xff0c;有人可能认为创建自定义地图需要高级制图知识或复杂的地理信息…

从react源码看hooks的原理

React暴露出来的部分Hooks //packages/react/src/React.js export {...useCallback,useContext,useEffect,useLayoutEffect,useMemo,useReducer,useRef,useState,... }功能描述 useState、useReducer: 状态值相关useEffect、useLayoutEffect: 生命周期相关useContext: 状态共…

Java多线程(一)——多线程的创建

多线程 在计算机中为了提高内存和资源的利用率&#xff0c;引入了并发编程的思想&#xff1b;多进程和多线程都能实现并发编程&#xff0c;但是多线程相对于多进程更“轻量”&#xff0c;&#xff08;多线程和多线程的关系和区别&#xff09;&#xff0c;所以这篇博客将着重讲…

CPU

文章目录CPU是什么CPU的构成1) 控制器2) 运算器3) 存储单元&#xff08;寄存器和高速缓存&#xff09;常见的CPU类型1) 单核 CPU2) 双核 CPU3) 四核 CPUCPU是什么 CPU 全称 Central Processing Unit&#xff0c;中文可译为中央处理器或者微处理器&#xff0c;或直接简称为处理…

挂脖式运动蓝牙耳机推荐,目前适合运动佩戴的五款耳机推荐

在科技的不断进步下&#xff0c;新型的骨传导耳机也是逐渐成为我们生活日常中的主流&#xff0c;其特殊的发声原理成为了我们喜爱的重点之一&#xff0c;也有些伙伴们还在边缘徘徊&#xff0c;想要入手骨传导耳机但又怕踩坑得不到好的体验&#xff0c;刚好小编在使用骨传导耳机…

【用户画像】应用场景

目前所做工作的主要业务场景&#xff1a;干货&#xff5c;一文从0到1掌握用户画像知识体系_腾讯新闻 广告联盟&#xff1f; 所谓广告联盟是什么呢&#xff1f;&#xff1f; 案例背景 某电商App的商品运营团队欲提升电子产品的老客复购率、新客下单率&#xff0c;于是选择了…

Tomcat常见问题解决方法总结,无法自动,无法访问,控制台乱码

Tomcat无法启动&#xff0c;无法访问 新下载的Tomcat&#xff0c;运行startup.bat后一闪而过&#xff0c;无法启动Tomcat服务。 可能会有这样的效果 可以在CMD窗口下进入Tomcat安装目录&#xff0c;运行startup可以看到报错信息。 可能有一下原因&#xff1a; 首先检查JAVA…

使用gitee部署静态网页

使用giteepages功能部署网页 需求 假如你辛辛苦苦写好了一个静态网页&#xff0c;很想要炫耀一下&#xff0c;让大家都可以通过公网访问看到我的网页。但是不想太麻烦&#xff0c;买服务器&#xff0c;安装软件&#xff0c;部署环境&#xff0c;配置域名&#xff0c;备案&…

通达信软件L2接口的委托队列有什么用?

如果我们开通了通达信Level 2接口&#xff0c;打开任意个股分时图&#xff0c;首先可以看到买一和卖一的部分委托&#xff08;如下图红框处&#xff09;。 点击【查看更多】&#xff0c;选择【委托队列】栏目&#xff0c;则可以看到完整的前50笔的委托买卖队列的数量。 而这些密…

【修电脑】VMware 从GHO文件备份恢复Win10/Win7系统

【修电脑】VMware 从GHO文件备份恢复Win10/Win7系统注意参考硬盘知识一、硬盘接口的分类二、硬盘的分类按照硬盘材质分为两大类按照接口类型区分boot启动知识Legacy BIOS引导uefi引导启动流程查看系统的引导启动方式1.VMware 新建win10 x64系统2.制作老毛桃U盘winpe3.VMware wi…

Linux C/C++ 学习笔记(七):DNS协议与请求

本文部分内容参考Linux C/C 开发&#xff08;学习笔记九 &#xff09;&#xff1a;DNS协议与请求的实现_菊头蝙蝠的博客-CSDN博客_struct dns 一、DNS的介绍 域名系统&#xff08;英文&#xff1a;Domain Name System&#xff0c;缩写&#xff1a;DNS&#xff09;的作用是将人…

佰维存储通过注册:拟募资8亿 国家集成电路基金是二股东

雷递网 雷建平 11月23日深圳佰维存储科技股份有限公司&#xff08;简称&#xff1a;“佰维存储”&#xff09;日前通过注册&#xff0c;准备在科创板上市。佰维存储计划募资8亿元&#xff0c;3亿元用于惠州佰维先进封测及存储器制造基地建设项目&#xff0c;2亿元用于先进存储器…

基于FME Desktop和FME Server的数据增量自动更新

一、自动更新的意义 自动更新使数据保持良好的现势性&#xff0c;具有良好现势性的数据可以准确反映最新情况&#xff0c;为领导者决策分析判断提供有力保障。 一年一度的国土变更调查就是国家为了及时全面查清我国土地利用状况&#xff0c;掌握详实准确的土地基础数据现势情…

项目分享:新年可以做的副业项目,红包封面制作

新的一年即将到来。今天想推荐一个非常暴力和稳定的项目&#xff0c;红包封面。这个项目在春节期间特别强大&#xff0c;因为新年包已经成为中国人的传统&#xff0c;从原来的纸包到现在的VX包已经成为一项必不可少的活动。因此&#xff0c;从需求的角度来看&#xff0c;这个项…

Linux 搭建本地镜像源(CentOS 离线 yum)

使用 RPM 包搭建本地镜像源 1. 下载所有源中的 RPM 包 yum -y install httpd yum-utils createrepo 创建 RPM 包的下载目录 mkdir /var/www/html/centos启动 httpd 服务 [rootlocalhost ~]# systemctl start httpd [rootlocalhost ~]# ss -antulp | grep :80 tcp LISTEN …

nerdctl 工具(用于 containerd 但兼容 docker CLI 习惯)

简介 nerdctl 是用于 containerd 并且 兼容 docker cli 习惯的管理工具&#xff0c;主要适用于刚从 docker 转到 containerd 的用户&#xff0c;操作 containerd 的命令行工具 ctr 和 crictl 不怎么好用&#xff0c;所以就有了 nerdctl。 要特别说明的是&#xff1a;nerdctl …

还在每天玩单调的控制台窗口?赶紧进来!!!用EasyX画出自己的优美窗口(万字教程,一文入门)

EasyX图形库教程 本文的封面第三章照片来自博客&#xff1a;爱心气球 文章目录EasyX图形库教程前言1.EasyX是什么&#xff1f;2.EasyX的安装开始教程1.基本概念1.1颜色1.2坐标2.创建窗口 -- 基本框架3.颜色设置3.1背景颜色3.2设置线条颜色3.3设置文本颜色3.4设置填充颜色4样式…

计算机毕业设计之java+ssm家校通网站

项目介绍 随着网络技术的飞速发展&#xff0c;网络已渗透到全人类的各个方面&#xff0c;深刻影响着我们的生活和工作方式。家校通网站给教育带来了更广阔的发展空间。家校通网站有对部分类似网站进行分析&#xff0c;找到规律和方法&#xff0c;吸取其特点&#xff0c;构思自…

Win11关闭Superfetch服务的操作方法分享

Win11关闭Superfetch服务的操作方法分享。有用户发现自己电脑在开机的时候&#xff0c;都会出现Superfetch服务的相关程序进程。为了优化自己的运行内存&#xff0c;想要将这个功能给进行关闭。那么电脑的Superfetch服务怎么去关闭&#xff0c;一起来看看关闭的方法吧。 操作方…

天宇优配|北上广深角逐“国字号”数据交易所 行业爆点

今日&#xff0c;上海数据生意地点揭牌一周年之际&#xff0c;将发动数据生意节&#xff0c;并将探究树立数交所国际板。10天前&#xff0c;深圳数据生意所正式揭牌。至此&#xff0c;北上广深四个一线城市均已树立数据生意所。 数据作为新型生产要素&#xff0c;正成为各地争相…