使用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
相关产品推荐
相关产品推荐

