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

使用dash_duo验证dcc.Dropdown值时出现矛盾报错求助

问题分析与解决方案

核心原因

dash_duo.wait_for_text_to_equal默认只检查目标元素自身的直接文本内容,不会递归查找子元素的文本。你的情况中,#my-dropdown是外层容器div,它本身没有直接文本,选中的"Apple"文本实际在子元素#react-select-2--value-item里,所以函数判定父元素文本不匹配,抛出超时异常。

至于报错信息里的矛盾描述("not found: Apple"却又显示"found: Apple"),是因为错误提示中附带了元素的完整文本内容(包含子元素),但函数内部的匹配逻辑只看目标元素自身的直接文本。

解决方案

方案1:直接定位到文本所在的子元素

直接使用文本所在的子元素选择器进行匹配,注意react-select生成的ID可能是动态的,推荐用更稳定的类选择器或属性选择器:

# 用类选择器定位
dash_duo.wait_for_text_to_equal('.Select-value-label', 'Apple', timeout=1)

# 或者用属性选择器(更精准)
dash_duo.wait_for_text_to_equal('[role="option"][aria-selected="true"]', 'Apple', timeout=1)

方案2:检查父元素下是否包含目标文本

如果需要确认外层容器下存在目标文本,可以手动获取元素的完整文本内容(包含子元素)并判断:

# 获取外层容器元素
dropdown_element = dash_duo.find_element('#my-dropdown')
# 断言文本存在于元素的完整文本中
assert 'Apple' in dropdown_element.text

完整修改后的测试代码示例

import dash
from dash import dcc


def test_001_dropdown(dash_duo):
    app = dash.Dash(__name__)
    app.layout = dcc.Dropdown(
        id='my-dropdown',
        options=[
            {'label': 'Banana', 'value': 'Banana'},
            {'label': 'Apple', 'value': 'Apple'},
            {'label': 'Orange', 'value': 'Orange'}],
        value='Apple')

    dash_duo.start_server(app)

    # 使用稳定的类选择器匹配子元素文本
    dash_duo.wait_for_text_to_equal('.Select-value-label', 'Apple', timeout=1)

内容的提问来源于stack exchange,提问作者Luggie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 09:33:23