Я уже некоторое время работаю над кроссбраузерным тестированием со своей командой и разобрал свои Chrome тесты.
Итак, сегодня я решил попробовать запустить тесты Edge моего товарища по команде и получаю сообщение ResourceWarning: Enable tracemalloc to get the object allocation traceback
как сумасшедшее. Примерно каждую секунду или около того он распечатывает от 1 до 3 одного и того же сообщения.
Я помню, как время от времени получал это сообщение при запуске Chrome тестов в начале, но никогда не доходил до крайности, которую я получил от Edge.
Я провел небольшое исследование ( 1 , 2 , 3 ), поэтому я знаю, что это не влияет на мой запуск Selenium.
Но мне любопытно, что происходит за кулисами, чтобы вызвать это больше на Edge, чем на Chrome.
Для уточнения c информации о моем Edge Driver я Я использую версию с сайта Microsoft для Edge версии 80.0.361.66. Я провел небольшое тестирование конфигурации, чтобы увидеть, имеет ли это какое-либо значение (версия драйвера и версия Edge), но все равно та же сумма.
Это особенно странно, потому что Edge использует Chromium. Мне интересно, проблема в том, как 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()
А вот образец минимального жизнеспособного кода для Edge
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()
Я проводил больше исследований по этому поводу, и, в частности, эта ошибка указывает на строку 374 из этого файла в удаленном драйвере Selenium.
При ближайшем рассмотрении, он попадает в условие if в строке 374 и просто не знает, что делать, поэтому терпит неудачу. Но почему?