【selenium】脚本实现并发压测 - 相关问题解决顺序记录

目的

通过web端页面功能实现并发开播、看播,对媒体、信令服务进行压测

实现顺序

  1. 同时启多个浏览器,多线程实现多webdriver
 for i in range(2):
 	_thread.start_new_thread(self.test_selenium, ())
  1. 一个浏览器启动其他tab
  • 本质:就是再开启另一个窗口tab
js = 'window.open("https://www.baidu.com/");'
self.driver.execute_script(js)
  1. 同时启动多个tab页面,一个webdriver
class Live(unittest.TestCase):
	@classmethod
	def setUpClass(cls):
		cls.driver_path = "/usr/local/bin/chromedriver"
	    cls.driver = webdriver.Chrome(cls.driver_path)
	    cls.url = "https://www.baidu.com//"
	    cls.driver.get(cls.url)
	
	@classmethod
	def tearDownClass(cls):
		cls.driver.quit()
	
	def test1():
		pass
		
	def test2():
		pass
	
	…………
	
	def change_tab(self):
	    js = 'window.open("https://XXXXX/Web_Demo/videocall/dist/");'
	    self.driver.execute_script(js)
	    time.sleep(2)
	    
	def for_test_watch(self):
	    for i in range(5):
	        _thread.start_new_thread(self.change_tab,())
	        hands = self.driver.window_handles
  1. 启动多个tab后,进行tab切换:获取句柄列表,进行句柄切换
def for_test_watch(self):
    for i in range(5):
        _thread.start_new_thread(self.change_tab,())
        hands = self.driver.window_handles
    print(len(hands))
    time.sleep(1)
    for j in hands:
        self.driver.switch_to.window(j)
        self.watch_live()
  1. 获取系统弹窗
  • 警告类弹窗 alert()
    显示警告或其他信息,用于通知用户,一般下方只有一个按钮(确认或OK)

  • 确认类弹窗confirm()
    询问是否继续某种操作等功能,弹窗中有【确认】和【取消】两种按钮。

  • 消息类弹窗prompt()
    需要输入一些信息,比如用户密码等,会有【确认】和【取消】按扭

  1. 解决:{“method”:“css selector”,“selector”:".list-frame"},例子:google设置页修改权限元素获取不到?!
  • 本质是shadow-root(open)DOM中的元素获取不到

chrome://settings/content/siteDetails?site=https%3A%2F%2Fqa-web.linkv.fun/

在这里插入图片描述

  • 实例:通过JS的手段获取shadow中的元素
# 返回的对象在这里
 def control_in_shadow(self, driver, js):
     shadow = driver.execute_script(js)
     return shadow

 def setting(self):
     time.sleep(2)
     js1 = 'return document.querySelector("body > settings-ui").shadowRoot.querySelector("#main").shadowRoot.querySelector("settings-basic-page").shadowRoot.querySelector("#basicPage > settings-section.expanded > settings-privacy-page").shadowRoot.querySelector("#pages > settings-subpage > site-details").shadowRoot.querySelector("div.list-frame > site-details-permission:nth-child(2)").shadowRoot.querySelector("#permission")'
     shadow = self.control_in_shadow(self.driver, js1)
     shadow.find_elements("id", "allow").pop().click()

     js2 = 'return document.querySelector("body > settings-ui").shadowRoot.querySelector("#main").shadowRoot.querySelector("settings-basic-page").shadowRoot.querySelector("#basicPage > settings-section.expanded > settings-privacy-page").shadowRoot.querySelector("#pages > settings-subpage > site-details").shadowRoot.querySelector("div.list-frame > site-details-permission:nth-child(3)").shadowRoot.querySelector("#permission")'
     shadow = self.control_in_shadow(self.driver, js2)
     shadow.find_elements("id", "allow").pop().click()
  1. 错误记录

TypeError: first arg must be callable
原因:_thread.start_new_thread(driver.execute_script(js),())

报错:selenium.common.exceptions.InvalidSessionIdException: Message: invalid session id
原因:selenium调用webdriver显示浏览器,关闭后又打开,提示 invalid session id 无效的 session id

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值