You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 10:52:23