[英]Angular 4 (ejected) and E2E tests (Protractor/Selenium configuration)
[英]Selenium e2e tests, be more specific
我正在使用Selenium WebDriver和Protractor在我的角度项目上运行e2e测试。 我在查找详细API以帮助我了解如何使用驱动程序时遇到了很多麻烦。 我的具体问题如下:
我在一个页面上有两个控制器,一个登录控制器和一个寄存器控制器。 它们都有一个绑定到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寻找更深入的文档。
你可以尝试使用类似的东西
ptor.findElements(protractor.By.model('user.username')).then(function(models){
models[0].sendKeys('nathanadmin');
models[1].sendKeys('secondstring');
});
不确定这是否严格正确,但它不会太远,基本上使用findElements获取具有相同标识符的所有元素并将它们保存为数组。 在我的测试中,我有类似的东西
visibleFilters.findElements(protractor.By.className('dropdown')).then(function(dropdowns){
dropdowns[2].findElement(protractor.By.id(filterID)).click();
希望这可以帮助
编辑:我的测试代码中的原因我有findElement是因为我需要更深入地获取我正在寻找的确切元素但我可以刚刚完成.click()
另一个编辑:至于更详细的文档,这是量角器的一个问题,但纯粹是因为团队专注于启动和运行添加新功能/修复错误等,我必须说,虽然我想要的大多数信息,我发现无论是在这里还是在github朱莉(不确定第二个名字,是一个量角器信息godess)并定期发布在这里和github帮助人们,这对我来说已经足够了
select.model('user.username')
只是一种“定位”DOM中元素的方法,这是一种特定于Protractor的方法。 WebDriver有许多定位策略,您可能会发现它们更灵活,在您的情况下,更具体。
Protractor规范的这一部分说明了可用的定位器机制: https : //github.com/angular/protractor/blob/master/docs/api.md#locator-strategies
考虑以下一种替代策略来隔离单个输入元素: element(by.id('username')).sendKeys('nathanadmin');
element(by.css('#username')).sendKeys('nathanadmin');
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.