我正在为我的项目编写一个编码的ui测试,我想测试一个标签是否可见。
但是,自动生成的代码使用WinText,它不包含任何可见性选项。
有没有办法检查WinText后面的ui元素的可见性或获取实际标签?
答案 0 :(得分:2)
最简单,最直接的方法是调用WinText的TryGetClickablePoint。如果它返回false,则表示控件不可见,屏幕外或被其他控件阻止。
Point p = new Point();
bool isVisible = UIMap.UIForm1Window.UILabel1Window.UILabel1Text.TryGetClickablePoint(out p);
如果你想摆弄“WinText背后的ui元素”那么你必须得到它的原生元素并将其转换为适当的类(如果是winform则为IAccessible)并从那里获得可见性状态。小心:你可能必须得到标签的窗口的原生元素,而不是标签的。
IAccessible acc = (UIMap.UIForm1Window.UILabel1Window.NativeElement as object[])[id] as IAccessible; //id is most probably 0, check with AccExplorer
bool isVisible = (((AccessibleStates)acc.accState & AccessibleStates.Invisible) == 0) && (((AccessibleStates)acc.accState & AccessibleStates.Offscreen) == 0);
答案 1 :(得分:1)
我正在为UITestControl
类使用以下扩展方法,到目前为止它已经非常防弹:
using Microsoft.VisualStudio.TestTools.UITesting;
namespace CodedUIExtensions
{
public static class UITestControlExtensions
{
public static bool IsElementVisible(this UITestControl control)
{
// Assume the control is invisible
bool visible = false;
System.Drawing.Point p;
try
{
// If the control is offscreen, bring it into the viewport
control.EnsureClickable();
// Now check the coordinates of the clickable point
visible = control.TryGetClickablePoint(out p)
&& (p.X > 0 || p.Y > 0);
}
catch (Exception ex)
{
// Boom goes the dynamite! Control is not visible.
// Log to stdout for debugging.
Console.WriteLine(ex);
}
return visible;
}
}
}
我的要求是:
使用它:
using CodedUIExtensions;
[CodedUITest]
class MyTest
{
[TestMethod]
public void SomeVisibilityTest()
{
UITestControl control = // ...
HtmlDiv div = // ...
Assert.IsTrue(control.IsElementVisible(), "Not visible");
Asset.IsFalse(div.IsElementVisible(), "Visible");
}
}
只要Coded UI控件类继承自UITestControl
并且您的C#文件中有using CodedUIExtensions
,每个控件都将使用IsElementVisible()
方法。这适用于网页以及GUI应用程序,例如WinForms。
答案 2 :(得分:0)
你可以试试这个:
Control.WaitForControlPropertyNotEqual(UITestControl.PropertyNames.State, ControlStates.Invisible);
答案 3 :(得分:0)
这个适用于我(以及使用 .TryGetClickablePoint()的方法):
while (myControl.State != ControlStates.Offscreen) { }