【发布时间】:2018-05-15 21:06:43
【问题描述】:
我正在寻找解决方案,如果可以等待用户在量角器中输入的数据。
我的意思是测试停止一段时间,我可以输入一些值,然后将这些数据用于进一步的测试。
我尝试使用javascript提示,但我没有做太多,也许可以在OS终端输入数据?
如果可能,请给我一个例子。
【问题讨论】:
标签: javascript selenium testing selenium-webdriver protractor
我正在寻找解决方案,如果可以等待用户在量角器中输入的数据。
我的意思是测试停止一段时间,我可以输入一些值,然后将这些数据用于进一步的测试。
我尝试使用javascript提示,但我没有做太多,也许可以在OS终端输入数据?
如果可能,请给我一个例子。
【问题讨论】:
标签: javascript selenium testing selenium-webdriver protractor
我不建议混合使用自动和手动 selenium 浏览器控件。
也就是说,您可以使用Explicit Waits 等待页面上发生某些事情,例如您可以等待文本出现在文本input 中,或者某个元素变得可见,或者页面标题等于您期望的内容,protractor 内置了不同的ExpectedConditions,而您可以轻松编写自己的自定义预期条件等待。不过,您必须设置一个合理的超时时间。
或者,您可以通过browser.params传递用户定义的参数,请参阅:
例子:
protractor my.conf.js --params.login.user=abc --params.login.password=123
然后,您可以通过browser.params 访问测试中的值:
var login = element(by.id("login"));
login.sendKeys(browser.params.login.user);
【讨论】:
如果您的数据将驻留在控制台中,您可以使用以下方法获取该数据:
browser.manage().logs().get('browser').then(function(browserLogs) {
// browserLogs is an array which can be filtered by message level
browserLogs.forEach(function(log){
if (log.level.value < 900) { // non-error messages
console.log(log.message);
}
});
});
然后如其他帖子中所述,您可以使用 driver.wait() 显式等待条件为真:
var started = startTestServer();
driver.wait(started, 5 * 1000,
'Server should start within 5 seconds');
driver.get(getServerUrl());
或者expected conditions,例如,如果等待多个条件。
【讨论】:
我也有同样的问题。经过长时间的搜索,我找到了 Protractor 5.3.2 的解决方案:
var EC = protractor.ExpectedConditions;
it('will pause for input...', function() {
browser.ignoreSynchronization = true
browser.waitForAngularEnabled(false);
// open web page that contains an input (in my case it was captchaInput)
browser.driver.get('https://example.com/mywebpagehere');
// waits for 15 sec for the user to enter something. The user shall not click submit
browser.wait(EC.textToBePresentInElementValue(captchaInput, '999'), 15000, "Oops :^(")
.then(function() {
console.log('Hmm... Not supposed to run!');
}, function() {
console.log('Expected timeout, not an issue');
});
browser.sleep(1000);
// submit the user input and execution proceeds (in my case, captchaButton)
captchaButton.click();
// . . .
});
【讨论】: