Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Ranorex测试自动化问题:无法可靠地单击silverlight web应用程序上的按钮_C#_Silverlight_Ranorex - Fatal编程技术网

C# Ranorex测试自动化问题:无法可靠地单击silverlight web应用程序上的按钮

C# Ranorex测试自动化问题:无法可靠地单击silverlight web应用程序上的按钮,c#,silverlight,ranorex,C#,Silverlight,Ranorex,我们已经使用Ranorex自动化框架为Silverlightweb应用程序自动化了一些测试用例。这些测试用例包括单击按钮以调用屏幕上的某些消息。为了抓取屏幕上的按钮,我们首先创建一个Ranorex button对象,然后使用Ranorexpath将其指向适当的元素。然后,我们使用RanorexButton.Click()事件来单击按钮。但是,此事件不可靠。它有时工作,有时不点击按钮。当没有点击按钮时,我们必须从头开始再次运行测试用例。我们做错了什么?如果这是ranorex的已知问题,请建议解决方

我们已经使用
Ranorex自动化框架
Silverlight
web应用程序自动化了一些测试用例。这些测试用例包括单击按钮以调用屏幕上的某些消息。为了抓取屏幕上的按钮,我们首先创建一个Ranorex button对象,然后使用
Ranorexpath
将其指向适当的元素。然后,我们使用
RanorexButton.Click()
事件来单击按钮。但是,此事件不可靠。它有时工作,有时不点击按钮。当没有点击按钮时,我们必须从头开始再次运行测试用例。我们做错了什么?如果这是ranorex的已知问题,请建议解决方法。

我还没有听说ranorex有这样的问题,可能这只是时间问题。 您可以在单击之前添加一个
Validate.Exists(yourButton)
,这样可以确保在成功加载按钮后执行单击。 如果是WebElement,也可以使用
PerformClick()
方法,而不是普通的Click()方法。 还有不同的方法可以确保按钮位于可见区域并具有焦点,如
ensureavibilible()
focus()
方法。
您可以在Ranorex的在线API中找到所用适配器的可用方法。

我也遇到了同样的问题,但我能够通过在单击之前引入Validate.Exists(infoObject)来解决问题。请确保传递按钮的infoObject或Validate.Exists API中的任何元素

例如:

Validate.Exists(repo.MyApp.LoginBtnInfo);
var button = repo.MyApp.LoginBtn;
button.Click();
关于,,
Avinash Nigam

如果按钮不在无需滚动即可看到的区域内,则可以使用

var button = repo.Buttons.button1;
button.EnsureVisible();
button.Click();

通过这种方式,按钮被强制监视。

这可能是xpath和元素Id-s的问题

如果即使页面被导航离开并向后移动(例如,SAP相关组件存在此问题),也会更改元素Id-s,则可能需要使用正则表达式生成更健壮的xPath路径变量

尝试查找未更改的对象和路径部分(例如“iFrame id=“MainContent”或“btn id=“id\u XXXX\u Search\u Button”)—当然,这仅在问题在此范围内时才有帮助

Ranorex正则表达式信息可在此处找到:

我所说的一个简单例子:

假设我们有一个输入字段,它的名称中有一个不断变化的ID:

US_EL.ID_F2B49DB60EE1B68131BD662A21B3432B:V_MAIN._046A-r
我知道Id中不变的部分是:

:V_MAIN._046A-r
我可以创建一个路径,通过使用正则表达式搜索元素的id的结尾来搜索元素:

/dom[@domain='test.example.com']//iframe[#'identifier']//iframe[#'identifier2']//input[@id**~'^**:V_MAIN._046A-r']
粗体部分将指定搜索Id以“:V_MAIN._046A-r”结尾的输入元素

由此产生的一个问题是,如果您的元素使用部分相同的名称,则可能会返回多个相同路径的元素。因此,当这个问题出现时,明智的做法是在路径中添加一些特定的点(例如“iframe[#'identifier2'])。

是的,我们正在使用
Focus()
方法,但这个问题仍然会发生。。。。我们还尝试了至少多次使用
click()
事件。另一个解决方法是一直单击按钮直到它可见。。。。当然,如果按钮未加载其他页面或在单击事件后仍然存在,则不能使用此按钮。