川石教育
全国咨询热线:136-9172-9932
  1. 首页 > 资讯与干货 > IT资讯

Selenium为什么慢,可能是加载策略设置不对

作者:川石学院 日期:2022-07-27 17:54:44 点击数:

一天一个关于测试知识点,5分钟内讲解你最关心的软件测试问题,今天就接着来谈谈关于软件测试中的自动化测试:Selenium为什么慢?

Selenium为什么慢,可能是加载策略设置不对(图1)

  有不少粉丝,甚至一些行业中有一定经验的朋友都说selenium性能差、很慢,打开一个网页要等半天才开始执行。初学的粉丝提出这个问题我能够理解,行业工作经验数年还这样说我就有点诧异了。看来很多小伙伴还是没有阅读官方文档的习惯,这里就简单的讲解一下为什么你会觉得selenium慢以及如何解决这个问题:

  当我们通过webdriver(比如启动谷歌浏览器:webdriver.Chrome())启动浏览器时,会启动一个没有任何缓存、cookie的浏览器。这个时候通过driver.get("https://xxx")去访问页面自然是慢的,因为它需要加载该页面的资源,如果它的图片、样式、js文件过大时,这个时候就会变得更慢。

  跟我们平时直接将浏览器清除缓存再访问是一个道理,这并不是Selnium本身性能存在缺陷。

  但这时小伙伴们肯定会有疑惑,就算清了浏览器缓存重新访问,也没有通过Selnium来跑的那么慢呀!想要点击的按钮都出现半天了,它都还不进行点击,这不叫慢吗?

  这其实跟Selenium的页面加载策略有关。

  Selenium的页面加载策略详解

  Selnium的页面加载策略(pageLoadStrategy)有三种:

  •   normal:等待整个页面加载完毕再开始执行操作。

  •   eager:等待整个dom树加载完成,即DOMContentLoaded这个事件完成,也就是只要 HTML 完全加载和解析完毕就开始执行操作。放弃等待图片、样式、子帧的加载。

  •   none:等待html下载完成,哪怕还没开始解析就开始执行操作。

  默认情况下,当 Selenium WebDriver 加载页面时,它遵循的是normal加载策略,所以就会导致页面加载过慢,特别是在图片、样式等文件过大时,慢的就尤其明显了。

  所以我们可以根据实际情况调整Selenium的页面加载策略来缩短等待时间,提高执行速度。

  默认情况(未手动指定加载策略)来访问爱奇艺首页,然后点击电影,共耗时:7s左右。

  使用eager加载策略来访问爱奇艺首页,然后点击电影,共耗时:3.6s左右。

  配置代码如下:

  chrome_options = Options()

  chrome_options.page_load_strategy = 'eager'

  driver = webdriver.Chrome(options=chrome_options)

  可以明显的看到访问速度变快了。

  以为就这样了吗?还可以更快!

  加载策略设置为none,并引入retry做重试(目的是为了防止报错,当然设置隐式等待也可,但没retry稳妥)可以只用2s左右就能执行完成,完整代码如下:

  import datetime

  from retrying import retry # 需第三方库,需pip进行安装

  from selenium import webdriver

  from selenium.webdriver.chrome.options import Options

  from selenium.webdriver.common.by import By

  @retry(wait_fixed=10, stop_max_attempt_number=1)

  def click(path):

  driver.find_element(By.XPATH, path).click()

  chrome_options = Options()

  chrome_options.page_load_strategy = 'none'

  driver = webdriver.Chrome(options=chrome_options)

  start_time = datetime.datetime.now()

  driver.get('https://www.iqiyi.com/')

  click('//*[@id="block-C"]/div/div/div/div[1]/div[1]/div/div[1]/div/div/a/span[2]')

  end_time = datetime.datetime.now()

  print(end_time - start_time)

  总结

  所以selenium并不慢,只是你加载策略没有选择对而误认为它慢。

  当我们遇到比较费解或疑惑的问题时,应该第一时间去看看官方文档,说不定它已经有了解决方案了。


相关文章
  • 亚马逊运营成功转行软件测试,薪资13K表示很满意!2022-07-27 17:54:44
  • 西安川石的兰朋友喊你来当他的学弟学妹啦!2022-07-27 17:54:44
  • 国外的月亮也不一定比国内测试猿的年薪美~2022-07-27 17:54:44
  • 建筑工程专业朱同学成功转行为软件测试人!2022-07-27 17:54:44
  • 财务管理专业转行软件测试月薪甩会计几条街!2022-07-27 17:54:44
  • 只有技术沉淀才能成功上岸,深圳就业薪资13K!2022-07-27 17:54:44
  • 薪资11K!实现自我价值,从掌握一门IT技术开始...2022-07-27 17:54:44
  • 文科生转行软件测试照样拿下高薪15K!2022-07-27 17:54:44
  • 恭喜罗同学喜提19.5K,成功入行软件测试!2022-07-27 17:54:44
  • 毕业1年,迷茫的他最终选择转行软件测试2022-07-27 17:54:44