我想知道两者之间有什么区别
element(by.id('userId')).sendKeys('abc');
和
browser.driver.findElement(by.id('userId')).sendKeys('abc');
使用量角器时。
我的网站是用angular 6开发的,并且在使用量角器编写一些UI测试时,我很难弄清楚前者根本不适合我。我不得不使用后者使它工作,直到花了几个小时才意识到。
我只是想知道我猜想element(by..)
是用在斜角上而有什么区别,而量角器官方网站上给出的示例似乎也在使用前一种方法。
此外,即使使用browser.driver
,即使我能够找到元素,但它也不会等待操作完成。单击Login
按钮后,以下代码失败。只是想知道什么是正确的方法。
it('should login', function() {
browser.get('http://localhost:4200');
browser.driver.findElement(by.id('userId')).sendKeys('abc');
browser.driver.findElement(by.id('password')).sendKeys('123');
browser.driver.findElement(by.id('login-button')).click();
browser.driver.findElement(by.xpath('//span[text()=\'Maintenance\']')).click();
}
答案 0 :(得分:1)
前者:element(by.id('userId')).sendKeys('abc')
是量角器的API,而browser.driver.findElement(by.id('userId')).sendKeys('abc');
是硒驱动器命令。
量角器包装了硒驱动器命令以提供其自己的API。量角器提供的API等待角度应用程序中的所有异步操作结束(例如“计时器”,“ https请求”),然后再继续处理队列中的下一条指令。另一方面,驱动程序命令不会等待异步操作完成。
如果前者在您的情况下不起作用,请检查您的应用程序中是否运行了某些计时器。
在角度应用中使用计时器的方法是:
this.ngZone.runOutsideAngular(() => {
setTimeout(() => {
// Changes here will not propagate into your view.
this.ngZone.run(() => {
// Run inside the ngZone to trigger change detection.
});
}, REALLY_LONG_DELAY);
});
答案 1 :(得分:0)
简单说明:
element(by.id('userId')).sendKeys('abc')
->在使用量角器自动进行角度应用时使用。
browser.driver.findElement(by.id('userId')).sendKeys('abc');
->在使用量角器自动执行非角度页面时使用。
希望它对您有帮助。
解决方案
browser.waitForAngularEnabled(true);
browser.get('http://localhost:4200');
element(by.id('userId')).sendKeys('abc');
element(by.id('password')).sendKeys('123');
element(by.id('login-button')).click();
element(by.xpath('//span[text()=\'Maintenance\']')).click();
如果您遇到等待问题。尝试添加预期的等待条件。请参阅https://www.protractortest.org/#/api?view=ProtractorExpectedConditions
答案 2 :(得分:0)
尝试使用以下代码段;
browser.wait(function() {
return element(by.id('userId')).isDisplayed();
}, 5000);
element(by.id('userId')).click();.sendKeys()
并请检查Jasmine API中的任何功能是否在您的代码中正常工作。 Jasmine API命令应适用于任何angular js应用程序。因此,请检查在 browser.get()命令
之后添加 browser.ignoreSynchronization = true 时上述命令是否有效如果您的茉莉花,网络驱动程序未更新,这也可能是一个问题
祝你好运!