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

WinAppDriver自动化测试:无法与Telerik RadComboBox持续交互超1秒

解决方案

1. 直接定位下拉触发按钮并等待下拉列表加载

Telerik RadComboBox的下拉按钮通常有独立的自动化标识,优先定位该按钮而非整个ComboBox控件,避免误触发双击或状态异常:

using OpenQA.Selenium.Appium.Windows;
using OpenQA.Selenium.Support.UI;
using System.Threading;

// 定位RadComboBox的下拉触发按钮(需根据实际控件AutomationId调整,通常包含"DropDownButton")
WindowsElement dropDownButton = myWindowsDriver.FindElementByAccessibilityId("ComboTitle_DropDownButton");
dropDownButton.Click();

// 显式等待下拉列表项加载完成,等待时间可根据实际情况调整
var wait = new WebDriverWait(myWindowsDriver, TimeSpan.FromSeconds(2));
var dropdownItems = wait.Until(driver => driver.FindElementsByClassName("RadComboBoxItem"));

// 选择目标选项"Ar"
foreach (var item in dropdownItems)
{
    if (item.Text.Equals("Ar"))
    {
        item.Click();
        break;
    }
}

2. 拆分操作步骤并增加间隔

避免连续的点击+输入操作,拆分步骤并加入短时间等待,给控件足够的状态切换时间:

WindowsElement myRadComboBox = myWindowsDriver.FindElementByAccessibilityId("ComboBox_Automation_Id");

// 先点击激活控件
myRadComboBox.Click();
Thread.Sleep(500); // 等待控件进入可交互状态

// 清空原有内容(仅适用于可编辑模式)
myRadComboBox.Clear();
Thread.Sleep(300);

// 发送按键
myRadComboBox.SendKeys("Ar");

3. 使用WinAppDriver原生控件模式操作

利用Windows自动化的ExpandCollapsePattern控制下拉列表展开,比模拟点击更稳定:

WindowsElement myRadComboBox = myWindowsDriver.FindElementByAccessibilityId("ComboBox_Automation_Id");

// 获取控件的展开折叠状态
var collapseState = myRadComboBox.GetAttribute("ExpandCollapsePattern.ExpandCollapseState");
if (collapseState == "Collapsed")
{
    // 执行展开操作
    myRadComboBox.ExecuteScript("arguments[0].Expand()", myRadComboBox);
}

// 等待目标选项出现后点击
var wait = new WebDriverWait(myWindowsDriver, TimeSpan.FromSeconds(2));
var targetItem = wait.Until(driver => driver.FindElementByName("Ar"));
targetItem.Click();

4. 排查SelectionChanged事件干扰

检查ComboTitle_SelectionChanged事件的实现逻辑,是否存在自动重置选中项或快速切换状态的代码。测试时可临时注释该事件绑定,验证是否是事件导致下拉列表自动关闭:

<!-- 临时注释SelectionChanged事件 -->
<Controls:RadComboBox x:Name="ComboTitle" 
                      DisplayMode="{Binding DisplayModeIdentiteBloc}" 
                      Height="20" 
                      Grid.Row="1" Grid.Column="1" 
                      SelectedValue="{Binding Path=ParentEntity.Individuals, ValidatesOnDataErrors=true}" 
                      ItemsSource="{Binding TitleLookup}" 
                      DisplayMemberPath="Value" 
                      SelectedValuePath="Key" 
                      <!-- SelectionChanged="ComboTitle_SelectionChanged" -->
                      IsAdornable="True"/>

5. 显式配置控件自动化属性

在XAML中给RadComboBox的选项设置统一的AutomationId,方便测试代码精准定位:

<Controls:RadComboBox x:Name="ComboTitle" 
                      AutomationId="ComboTitle_Main"
                      DisplayMode="{Binding DisplayModeIdentiteBloc}" 
                      Height="20" 
                      Grid.Row="1" Grid.Column="1" 
                      SelectedValue="{Binding Path=ParentEntity.Individuals, ValidatesOnDataErrors=true}" 
                      ItemsSource="{Binding TitleLookup}" 
                      DisplayMemberPath="Value" 
                      SelectedValuePath="Key" 
                      SelectionChanged="ComboTitle_SelectionChanged" 
                      IsAdornable="True">
    <Controls:RadComboBox.ItemContainerStyle>
        <Style TargetType="Controls:RadComboBoxItem">
            <Setter Property="AutomationId" Value="{Binding Key}"/>
        </Style>
    </Controls:RadComboBox.ItemContainerStyle>
</Controls:RadComboBox>

之后可直接通过AutomationId定位选项:

// 展开下拉列表后直接定位目标选项
WindowsElement targetItem = myWindowsDriver.FindElementByAccessibilityId("Ar");
targetItem.Click();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 08:27:03