我已经和我的团队一起进行跨浏览器测试了一段时间,并且已经整理了我的Chrome测试。
因此,今天我决定尝试运行队友的Edge测试,并且收到ResourceWarning: Enable tracemalloc to get the object allocation traceback
消息像疯了似的。大约每秒钟就会打印出1至3条相同的消息。
[我记得刚开始时在运行Chrome测试时偶尔会收到此消息,但从未达到我从Edge获得的最高水平。
我已经做了一些较小的研究(1,2,3,所以我知道这不会影响我的硒运行。
但是我很好奇为什么在幕后发生了什么事情,而不是在Chrome上导致了更多。
有关Edge驱动程序的特定信息,我使用Microsoft网站上的Edge版本80.0.361.66。我确实进行了一些配置测试,以查看是否有任何区别(驱动程序版本和边缘版本),但数量相同。
这特别奇怪,因为Edge使用铬。我想知道Selenium如何控制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远程驱动程序中this file的第374行。
经过仔细检查,它在第374行遇到了if条件,只是不知道该怎么做,所以失败了。但是为什么呢?
我已经对您的代码进行了测试,它将显示以下错误:“ ResourceWarning:未关闭”
我们可以尝试使用以下代码忽略此警告:
Python 3脚本:
if __name__ == '__main__':
unittest.main(warnings='ignore')
更多详细信息,请检查Python 3 unittest docs。
此外,您还可以参考this thread关闭资源。