行爲檢查時引發異常: 我錄使用Visual Studio 2015年企業編碼的UI測試生成器Microsoft Internet Explorer的Web應用程序的測試。 測試已回放,但他們在檢查任何 Web UI上的某個複選框時總是失敗,並且出現異常。也就是說,它對所有複選框都失敗。編碼的UI測試CheckBox控件被隱藏,使用VS2015
當上一個複選框控制執行一個操作時引發的異常:這是由Visual Studio 2015生成用於該控制
Cannot perform 'SetProperty of Checked with value "True"' on the hidden control
的代碼是:
// Select 'Enable payment cancellation.' check box
uIEnablepaymentcancellCheckBox1.Checked = this.NewOpAgreeTempTestParams.UIEnablepaymentcancellCheckBox1Checked;
我已經研究關於類似的探測問題的許多其他討論,但我從來沒有發現任何討論的問題具有完全相同的行爲。
具體是什麼不同的是:當試圖找到從編碼的UI測試編輯器的控制(或通過使用在測試代碼mycheckboxcontrol.DrawHighlight()方法)它從來沒有突出的複選框中所在的地方UI ,而是在文檔的最左上角中繪製了一個藍色小矩形。
爲了獲得一些相關信息,我記錄了一個簡單的測試,它使用我們的Web UI中的基本複選框控件之一,然後將生成的代碼移到UIMap.cs中,並添加了一些我能想到的語句。 [請注意,我是編碼UI測試的新手,所以我可能錯過了一些好主意,但是我從閱讀有關此主題的討論中瞭解了一些想法]。然後我在調試模式下運行測試並捕獲輸出以在此共享。
下面是測試代碼:
System.Diagnostics.Trace.WriteLine("Sanity check of the checkbox control-->");
System.Diagnostics.Trace.WriteLine("Friendly name=" + uIEnablepaymentcancellCheckBox1.FriendlyName);
System.Diagnostics.Trace.WriteLine("LabeledBy=" + uIEnablepaymentcancellCheckBox1.LabeledBy);
System.Diagnostics.Trace.WriteLine("ControlType=" + uIEnablepaymentcancellCheckBox1.ControlType);
System.Diagnostics.Trace.WriteLine("Id=" + uIEnablepaymentcancellCheckBox1.Id);
System.Diagnostics.Trace.WriteLine("Exists=" + uIEnablepaymentcancellCheckBox1.Exists);
System.Diagnostics.Trace.WriteLine("Count of matching controls=" + uIEnablepaymentcancellCheckBox1.FindMatchingControls().Count);
System.Diagnostics.Trace.WriteLine("Count of search properties=" + uIEnablepaymentcancellCheckBox1.SearchProperties.Count);
System.Diagnostics.Trace.WriteLine("Width=" + uIEnablepaymentcancellCheckBox1.BoundingRectangle.Width);
System.Diagnostics.Trace.WriteLine("Height=" + uIEnablepaymentcancellCheckBox1.BoundingRectangle.Height);
System.Diagnostics.Trace.WriteLine("X=" + uIEnablepaymentcancellCheckBox1.BoundingRectangle.X);
System.Diagnostics.Trace.WriteLine("Y=" + uIEnablepaymentcancellCheckBox1.BoundingRectangle.Y);
System.Diagnostics.Trace.WriteLine("Value=" + uIEnablepaymentcancellCheckBox1.Value);
System.Diagnostics.Trace.WriteLine("Checked=" + uIEnablepaymentcancellCheckBox1.Checked);
System.Diagnostics.Trace.WriteLine("<--");
在調試窗口的測試代碼的結果輸出:
Sanity check of the checkbox control-->
Friendly name=Enable payment cancellation.
LabeledBy=Enable payment cancellation.
ControlType=CheckBox
Id=PaymentCancellation
Exists=True
Count of matching controls=1
Count of search properties=4
Width=0
Height=0
X=21
Y=130
Value=on
Checked=False
<--
從我發現這些都是搜索屬性的情況下,這是相關的調試器:
ControlType EqualTo CheckBox
TagName EqualTo INPUT
Id EqualTo PaymentCancellation
Name EqualTo PaymentCancellation
以上測試代碼需要注意的一些事項:
- 看來,當寬度(或高度)不是> 0時,控件被認爲是隱藏控件,但我期望隱藏控件的寬度爲-1,這取決於我讀過的討論。
- 代碼發現的X,Y座標顯示編碼UI測試人員認爲控件位於文檔的左上角,因此距離網頁實際控件的位置很遠。
- 只找到一個控制
替代試圖setProperties方法:
由於在一些討論中出現了使用鼠標的建議。在一個隱藏的控件上單擊而不是SetProperties(忽略這個不應該是一個隱藏的控件的事實)我嘗試了這個,但是它失敗了,並且出現了類似的異常。
代碼嘗試:Mouse.Click(uIEnablepaymentcancellCheckBox1);
結果:Cannot perform 'Click' on the hidden control.
此外,下面的代碼也提請在左上角高亮框而不是在CheckBox控件本身:
uIEnablepaymentcancellCheckBox1.DrawHighlight();
總結問題:任何線索爲什麼編碼的UI測試生成器創建測試用這種方式複選框,以便我可以找到一種方法來防止他們變得隱藏無法執行任何操作的控制檯?
[更新如下2016年11月24日]
很多測試更後,並與其他人交談,我更仔細地審查CheckBox控件,我意識到,UI的原作者定製它,使得它不再與普通的複選框完全一樣。普通的複選框控件很好。 這個控件現在是一個名爲「checkbox-container」的CSS類。複選框控件實際上是有意隱藏的,因爲它不是僅僅檢查或取消選中普通複選框,而是顯示覆選框的兩個圖像之一 - (大)空框的圖像或複選框的圖像。複選框容器也會在被選中時添加一個名爲「checked」的類。
這個自定義控件在屏幕上看起來很不錯,但是它給編碼的UI測試帶來了問題。如果有人想保持自定義控件的原樣,那麼編碼UI測試代碼將不得不手動維護以與自定義控件保持其值的類似方式工作(即,「已檢查」類將被添加或刪除從複選框的標籤控件而不是直接使用複選框)。