0

我正在测试一个用.NET Backend和AngularJS前端编写的应用程序。 使用Selenium和specflow集成(C#)编写一些自动化测试。我如何在angularJS前端使用硒自动化测试

我已经完成了初始设置,但我面临的最大困难之一是检测动态网页元素。由于该应用使用的是Angular,除非我尝试使用XPath,否则无法轻松识别大多数元素。 Selenium不支持复合类名称,即“class =”ng-pristine ng-valid ng-touched“”,并且ID不断变化。

有没有更好的方法来做到这一点?还是我可以用来让我的生活更轻松的图书馆?

任何输入赞赏:)

回答

4

为了测试AngularJS应用,我会建议你使用Protractor。这是AngularJS应用程序的端到端测试框架。当您使用任何自动化工具来自动化Angular应用程序时,您面临的问题非常普遍,这就是Google提出量角器的原因。

对于化合物类用途:

driver.findElement(By.cssSelector(".ng-pristine.ng-valid.ng-touched"); 
+0

这是一个很好的建议。我也使用量角器在非角度页面上进行自动化。量角器没有最好的错误记录,但如果你有硒的经验,它应该可以帮助你调试测试。使用量角器可以关闭'ng-model'&'ng-repeat'标签。它也不关心复合类名称! :) – doct03

1

Shubhasmit古普塔是正确的有关使用Protractor为AngularJS应用程序。 但是如果你还没有准备好走下去,那么使用xpath有什么问题?

使用您的例子中,你可以很容易地通过这样的类参数识别你的对象,如果你是肯定的,那不会有任何更多的动态加载的类:

//*[@class='ng-pristine ng-valid ng-touched'] 

或者这样,如果还有更多的类可以是动态的元素上加载的概率:

//*[contains(@class='ng-pristine ng-valid ng-touched')] 

或者,如果你的类的连顺序可以改变:

//*[contains(@class='ng-pristine') and contains(@class='ng-valid') and contains(@class='ng-touched')] 

当然,这种方法假设您的元素可以通过这些类属性的组合唯一标识,或者您正在搜索一组对象,或者您将使用其他属性来使标识具有唯一性。

使用cssSelector的Shubhasmit Guptas方法通常被认为是更快更精确的方法,只要您能够通过这种类组合来识别对象。 xpath是受欢迎的,如果你需要潜在更多的属性,而不仅仅是类。

1

我同意Shubhasmit Gupta。只有原始的量角器是基于JavaScript的问题,并且可能会开始使用它。我建议使用Protractor.NET,它也允许你使用SpecFlow。

量角器的主要优点是它允许使用特定的角度定位器:NgBy.Model,NgBy.Repeater,NgBy.Binding等并提供了很好的同步机制。

因为量角器是围绕硒的包装,所以您可以使用所有的硒功能。

+0

完全同意你的观点,人们可能会发现,由于JavaScript和NodeJS的异步行为,人们可能会发现它很少有默认的最初理解。我也面临同样的问题:) –