我和我的团队一起进行跨浏览器测试已经有一段时间了,我已经整理了我的Chrome测试。
所以今天我决定试着运行我队友的Edge测试,我收到了疯狂的ResourceWarning: Enable tracemalloc to get the object allocation traceback
消息。大约每隔一秒钟,它就会打印出1到3条相同的消息。
我记得在一开始运行Chrome测试时偶尔会收到这条消息,但从来没有从Edge收到过这么多。
我做了一些小的研究(1,2,3(,所以我知道这不会影响我的Selenium跑步。
但我很好奇是什么在幕后发生的事情导致了Edge比Chrome更严重的问题。
有关我的Edge驱动程序的具体信息,我使用的是Microsoft网站上的Edge版本80.0.361.66。我确实做了一些配置测试,看看这是否有什么不同(驱动程序版本和边缘版本(,但数量仍然相同。
这特别奇怪,因为Edge使用Chromium。我想知道这是否是硒如何控制Edge的问题。
以下是Chrome 的最小可行代码示例
import time
import unittest
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
class test_state(unittest.TestCase):
@classmethod
def setUp(self):
self.driver = Chrome('__tests__/drivers/chromedriver.exe')
self.driver.maximize_window()
self.driver.get("https://adbanker.com/")
def test_state(self):
try:
url = self.driver.current_url
print(url)
time.sleep(5)
title = self.driver.title
print(title)
WebDriverWait(self.driver, 10).until(ec.visibility_of_element_located((By.XPATH,'//*[@id="for"]')))
lr = WebDriverWait(self.driver, 10).until(ec.visibility_of_element_located((By.ID,'statenav')))
lr.click()
ce = WebDriverWait(self.driver, 10).until(ec.visibility_of_element_located((By.XPATH,'//*[@id="line_dropdown"]/option[3]')))
ce.click()
ca = WebDriverWait(self.driver, 10).until(ec.visibility_of_element_located((By.XPATH,'//*[@id="state_dropdown"]/option[6]')))
ca.click()
time.sleep(5)
except:
raise
@classmethod
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main()
这是一个边缘的最小可行代码示例
import time
import unittest
from selenium.webdriver import Edge
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as ec
class test_state(unittest.TestCase):
@classmethod
def setUp(self):
self.driver = Edge('__tests__/drivers/msedgedriver.exe')
self.driver.maximize_window()
self.driver.get("https://adbanker.com/")
def test_state(self):
try:
url = self.driver.current_url
print(url)
time.sleep(5)
title = self.driver.title
print(title)
WebDriverWait(self.driver, 10).until(ec.visibility_of_element_located((By.XPATH,'//*[@id="for"]')))
lr = WebDriverWait(self.driver, 10).until(ec.visibility_of_element_located((By.ID,'statenav')))
lr.click()
ce = WebDriverWait(self.driver, 10).until(ec.visibility_of_element_located((By.XPATH,'//*[@id="line_dropdown"]/option[3]')))
ce.click()
ca = WebDriverWait(self.driver, 10).until(ec.visibility_of_element_located((By.XPATH,'//*[@id="state_dropdown"]/option[6]')))
ca.click()
time.sleep(5)
except:
raise
@classmethod
def tearDown(self):
self.driver.quit()
if __name__ == '__main__':
unittest.main()
我对此做了更多的研究,特别是这个错误指向Selenium的远程驱动程序中该文件的第374行。
经过仔细检查,它在374线上达到了if条件,只是不知道该怎么办,所以它失败了。但为什么呢?
我已经在我这边测试了您的代码,它将显示以下错误:"ResourceWarning:unclosed">
我们可以尝试使用以下代码忽略此警告:
Python 3脚本:
if __name__ == '__main__':
unittest.main(warnings='ignore')
更多详细信息,请查看Python 3单元测试文档。
此外,您还可以引用此线程来关闭资源。
升级到msedge v81并使用selenium==4.0.0a5,其中需要使用:
options = EdgeOptions()
#options.add_argument('headless')
#options.add_argument('disable-gpu')
options.add_argument('log-level=0')
options.use_chromium = True
#options.binary_location = r"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe"
self.driver = Edge(options=options)
在旧硒上,Edge((中没有use_chromium键。它比Chrome慢,而且它将大量调试转储到stdout中。