簡體   English   中英

使用codedUI在網頁中選擇隱藏的單選按鈕

[英]Selecting a hidden radio button in a webpage using codedUI

我正在嘗試選擇隱藏的編碼UI中的單選按鈕。 我正在進行手工編碼並使用Visual Studio Professional 2015。

這是我的單選按鈕屬性:

<span id="AddExtraDataWidget_un10_NoorgSportInd_WRAPPER">
<input id="AddExtraDataWidget_un10_No_GROUP" class="Radio" type="radio" value="AddExtraDataWidget_un10_No" onfocus="null" onblur="null" onclick="null;showHideCntrldByCaption(this.checked,'','No','false')" name="AddExtraDataWidget_un10_orgSportInd" tabindex="21"/></span>

我得到以下異常:“‘Microsoft.VisualStudio.TestTools.UITest.Extension FailedToPerformActionOnHiddenControlException’發生在Microsoft.VisualStudio.TestTools.UITesting.dll但在用戶代碼中沒有處理”

我的代碼是:

HtmlRadioButton radioButtonObject = new HtmlRadioButton(browserWindow);
            radioButtonObject.SearchProperties.Add(HtmlRadioButton.PropertyNames.Id, radioButtonObjectIDVal, PropertyExpressionOperator.Contains);
            radioButtonObject.SearchProperties.Add(HtmlRadioButton.PropertyNames.Name, radioButtonObjectNameVal, PropertyExpressionOperator.Contains);
            radioButtonObject.SearchProperties.Add(HtmlRadioButton.PropertyNames.Value, "AddExtraDataWidget_un10_No", PropertyExpressionOperator.Contains);
            radioButtonObject.SearchProperties.Add(HtmlRadioButton.PropertyNames.ControlType, "RadioButton", PropertyExpressionOperator.EqualTo);
            radioButtonObject.SearchProperties.Add(HtmlRadioButton.PropertyNames.Class, "Radio", PropertyExpressionOperator.EqualTo);
            radioButtonObject.SearchProperties.Add(HtmlRadioButton.PropertyNames.Type, "radio", PropertyExpressionOperator.EqualTo);
            radioButtonObject.SearchProperties.Add(HtmlRadioButton.PropertyNames.ClassName, "HtmlRadioButton", PropertyExpressionOperator.EqualTo);
            radioButtonObject.SearchProperties.Add(HtmlRadioButton.PropertyNames.TagName, "INPUT", PropertyExpressionOperator.EqualTo);

radioButtonObject.FindMatchingControls();
radioButtonObject.GetClickablePoint();
radioButtonObject.DrawHighlight();
radioButtonObject.Find();
radioButtonObject.EnsureClickable();
Mouse.Click(radioButtonObject);
radioButtonObject.Selected = fieldVal;

我嘗試了幾乎在這些論壇和MSDN中建議的所有內容,但沒有運氣。

請有人幫我這個嗎? 非常感謝您的幫助。

謝謝

搜索時通常更少。 如果你知道id,你只需要設置id(假設id在頁面中實際上是唯一的)。

HtmlRadioButton radioButtonObject = new HtmlRadioButton(browserWindow);
radioButtonObject.SearchProperties.Add(HtmlRadioButton.PropertyNames.Id, "AddExtraDataWidget_un10_No_GROUP", PropertyExpressionOperator.Equals);

擁有額外的搜索屬性只會使測試工作比它需要的更難:)

如果有多個具有此部分ID的內容,則執行包含可能會很危險。 如果您需要部分匹配並且知道可能找到多個匹配,請使用FindMatchingControls()並使用LINQ或其他內容過濾到您想要的那個。

我有一個在這里找到隱藏控件的例子http://codeduiexamples.com/examples/example1

你的控件是如何被隱藏的? 例如,顯示:無,可見性:隱藏,從DOM中刪除,......?

對於發現這篇文章的其他人來說,還有另一種解決這個問題的方法。 基本上OP的搜索和過濾屬性不正確。 其他前端UI框架(KendoUI,Angular)將創建“隱藏”的單選按鈕,即使您的屬性正確,您也無法通過CodedUI與它們進行交互。 這也可能會影響其他控件。

我的手動編碼測試解決方案是編寫一個看起來像這樣的共享方法:

/// <summary>
/// Clicks any control on a page for the given area.
/// </summary>
/// <param name="controlObject">Control Object to Click</param>
public static void ClickControl(UITestControl controlObject, int offset = 5)
{
    Rectangle clickArea = controlObject.BoundingRectangle;
    Point clickPoint = new Point(clickArea.X + offset, clickArea.Y + offset);
    Mouse.Click(clickPoint);
}

在簡單的英語中,這使用控件的邊界框來單擊其中的一個點(X和Y值來自左上角)。 可以隱藏具有良好ID的控件,但無論如何您都可以單擊它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM