运行Selenium测试时出现USB描述符读取错误,如何解决?
解决Selenium测试中的USB相关错误
错误日志
DevTools listening on ws://127.0.0.1:57697/devtools/browser/af541b42-1a2f-4e22-9dfd-bb5caefedbc9 [8660:20572:0220/082009.437:ERROR:usb_descriptors.cc(141)] Failed to read length for configuration 1. [8660:20572:0220/082009.446:ERROR:usb_descriptors.cc(100)] Failed to read all configuration descriptors. Expected 2, got 1. [8660:20572:0220/082009.448:ERROR:device_event_log_impl.cc(192)] [08:20:09.441] USB: usb_device_win.cc:95 Failed to read descriptors from \\?\usb#vid_1199&pid_9063#5&9c068d0&0&2#{a5dcbf10-6530-11d2-901f-00c04fb951ed}. <selenium.webdriver.remote.webelement.WebElement (session="fb3e316a4a608b4bcd94ba958e38ad0b", element="2F69BB49F203DE879037862EE5EBE74D_element_59")>
相关测试代码
BaseClass
def verifyPresence(self, path): WebDriverWait(self.driver, 60).until( EC.visibility_of_element_located(path) ) def verifyClickable(self,path): WebDriverWait(self.driver, 20).until( EC.element_to_be_clickable(path) ) def add_item_to_cart(self, ItemName): menupage = MenuPage(self.driver) self.verifyPresence(menupage.Cards) Items = menupage.getCards() for item in Items: print(f"{item}\n") item_name = menupage.getItemName(item) print(f"Item name is: {item_name}\n") if item_name == ItemName: print("Item found") # self.verifyPresence(menupage.AddToBucket) print("presenting item") self.verifyClickable(menupage.AddToBucket) print("click verfied") menupage.clickAddToBucket(item) break else: print("Item not found") def go_to_menu(self): header = Header(self.driver) self.closePopup() header.click_sidenavbar() self.verifyClickable(header.ExploreMenuSidenav) header.click_explore_menu_sidenav()
Testcase
def test_delivery_order(self): self.go_to_menu() self.add_item_to_cart("Krunch Burger")
解决方案
1. 禁用Chrome的USB设备访问
在初始化ChromeDriver时添加参数,阻止浏览器扫描USB设备,避免触发底层错误:
from selenium.webdriver.chrome.options import Options chrome_options = Options() # 屏蔽DevTools日志和USB相关输出 chrome_options.add_experimental_option("excludeSwitches", ["enable-logging"]) chrome_options.add_argument("--disable-usb") chrome_options.add_argument("--disable-usb-device-discovery") # 初始化driver时传入配置 driver = webdriver.Chrome(options=chrome_options)
2. 匹配ChromeDriver与Chrome版本
确保ChromeDriver的版本和本地安装的Chrome浏览器版本完全一致,版本不兼容会引发各类底层交互异常,可从Chrome官方渠道下载对应版本的ChromeDriver。
3. 处理系统USB设备
错误中提到的VID_1199&PID_9063是Sierra Wireless的网络设备,可尝试:
- 卸载该设备的驱动,重新安装官方提供的最新驱动
- 暂时在设备管理器中禁用该USB设备,再运行测试
4. 修正元素定位逻辑
原代码中verifyClickable(menupage.AddToBucket)是全局定位按钮,可能定位到非当前商品的元素,导致异常。应基于循环中的item元素来定位对应的添加按钮:
# 修改add_item_to_cart方法中的对应部分 if item_name == ItemName: print("Item found") # 基于当前item定位添加按钮 add_button = item.find_element(*menupage.AddToBucket) self.verifyClickable(add_button) print("click verified") add_button.click() break
同时调整verifyClickable方法支持传入WebElement:
def verifyClickable(self, target): if isinstance(target, tuple): WebDriverWait(self.driver, 20).until(EC.element_to_be_clickable(target)) else: WebDriverWait(self.driver, 20).until(EC.element_to_be_clickable(target))
内容的提问来源于stack exchange,提问作者Hamza Abbas
相关产品推荐
相关产品推荐

