2014-02-28 41 views
0

我使用Selenium WebDriver和Protractor在我的角度项目上运行e2e测试。我很难找到一个详细的API,这将帮助我了解如何使用该驱动程序。我的具体问题如下:Selenium e2e测试,更具体

我在一个页面上有两个控制器,一个登录控制器和一个注册控制器。它们都有一个绑定到user.username的输入。要测试登录,我用的是代码:

element(select.model('user.username')).sendKeys('nathanadmin'); 

我得到警告:警告:发现定位by.model(“user.username”)

一个以上的元素 - 你可能需要是更具体的

这是不是一个问题,直到我尝试测试寄存器,在这种情况下,我不知道如何告诉它选择第二个'user.username'输入。

我试图寻找通过这个页面: https://github.com/angular/protractor/blob/master/docs/api.md

,而这个页面: http://docs.seleniumhq.org/docs/03_webdriver.jsp

,但我似乎无法找到一个更全面的API与如何做更复杂的“一个简单的解释选择”。

编辑:

我觉得这样的事情将是有益的:

element(select.model('user.username').first()).sendKeys('nathanadmin'); 

我想出什么样的主意是:

element.all(select.model('user.username')).then(function(elements) { elements[0].sendKeys('nathanadmin'); }); 

但是,这仍然不能帮助我,因为我我正在为webdriver寻找更深入的文档。

回答

2

你可以尝试使用像

ptor.findElements(protractor.By.model('user.username')).then(function(models){ 
    models[0].sendKeys('nathanadmin'); 
    models[1].sendKeys('secondstring'); 
    }); 

不知道这是否严格co但它不会太远,基本上使用findElements获取具有相同标识符的所有元素并将它们保存为数组。我在我的测试是这样的,其工作

visibleFilters.findElements(protractor.By.className('dropdown')).then(function(dropdowns){ 
     dropdowns[2].findElement(protractor.By.id(filterID)).click(); 

希望这有助于

编辑:从我的测试代码的缘故,我findElement是因为我需要更进一步得到确切的元素IM寻找,但我可以刚刚完成。点击()

另一个编辑:至于更详细的文档,这是一个量角器的问题,但它纯粹是因为团队已经集中在启动并运行添加新功能/修复错误等,我必须说,尽管大多数信息我已经找到了我在这里或在github上找到的Julie(不知道第二个名字,是量角器信息女神),并定期发布在这里和github帮助人们,这已经足够我

0

select.model('user.username')只是在DOM中定位一个元素的一种方法,这是一种量角器特定的方法。 WebDriver有许多定位策略,您可能会发现更灵活,在您的情况下,更具体。

量角器规范的这部分说明了可用的定位机制,您: https://github.com/angular/protractor/blob/master/docs/api.md#locator-strategies

考虑这些备选方案中的一个单一输入元素隔离: element(by.id('username')).sendKeys('nathanadmin'); element(by.css('#username')).sendKeys('nathanadmin');

+0

这并没有'实际上回答我的问题。事实上,你包含了我已经说过的我访问过的链接。请参阅编辑。 – yourdeveloperfriend