Javascript E2E测试-WebdriverJS、硒和茉莉
好的,我遵循了几个稍有不同的示例,正如您在下面的注释代码中所看到的。他们都声称工作,但我不能让他们这样做 我正在使用; -selenium Web驱动程序 -jasmine节点报告器修复jasmine节点错误 因此,这是一个非常简单的异步测试,打开Google并搜索,然后获取页面标题 问题; 返回的页面标题是Google主页,而不是搜索结果页面。浏览器最终显示在搜索结果页面上 代码 结果 所以有人说我需要延长茉莉花的超时时间,这没什么区别 其他人说你需要Jasmine done方法——没有这个,测试就不能完成 我不明白为什么等待不等待无论提供什么超时,结果都会立即返回。请参阅- 内部函数将返回driver.wait将等待的承诺,并将其值true/false作为等待条件 你应申请的更改是—Javascript E2E测试-WebdriverJS、硒和茉莉,javascript,selenium,selenium-webdriver,jasmine,integration-testing,Javascript,Selenium,Selenium Webdriver,Jasmine,Integration Testing,好的,我遵循了几个稍有不同的示例,正如您在下面的注释代码中所看到的。他们都声称工作,但我不能让他们这样做 我正在使用; -selenium Web驱动程序 -jasmine节点报告器修复jasmine节点错误 因此,这是一个非常简单的异步测试,打开Google并搜索,然后获取页面标题 问题; 返回的页面标题是Google主页,而不是搜索结果页面。浏览器最终显示在搜索结果页面上 代码 结果 所以有人说我需要延长茉莉花的超时时间,这没什么区别 其他人说你需要Jasmine done方法——没有这个,
driver.wait(function () {
return driver.getTitle().then(function (title) {
return title === 'webdriver - Google Search';
});
}, 5000);
见-
内部函数将返回driver.wait将等待的承诺,并将其值true/false作为等待条件
你应申请的更改是—
driver.wait(function () {
return driver.getTitle().then(function (title) {
return title === 'webdriver - Google Search';
});
}, 5000);
因此,上面的问题是,我无法让Jasmine在使用driver.wait进行断言之前等待页面加载 Jasmine在司机之前完成了。等待返回 相反,我使用了Jasmine的Waits方法
var webdriver = require('selenium-webdriver');
var driver = new webdriver.Builder().
withCapabilities(webdriver.Capabilities.chrome()).
build();
describe('basic test', function () {
it('should be on correct page', function () {
var match = 'webdriver - Google Search',
title = '';
driver.get("http://www.google.com");
driver.findElement(webdriver.By.name("q")).sendKeys("webdriver");
driver.findElement(webdriver.By.name("btnG")).click();
// wait for page title, we know we are there
waitsFor(function () {
driver.getTitle().then(function (_title) {
title = _title;
});
return title === match;
}, 'Test page title, so we know page is loaded', 6000);
// test title is correct
runs(function () {
expect(title).toEqual(match);
});
});
});
因此,上面的问题是,我无法让Jasmine在使用driver.wait进行断言之前等待页面加载 Jasmine在司机之前完成了。等待返回 相反,我使用了Jasmine的Waits方法
var webdriver = require('selenium-webdriver');
var driver = new webdriver.Builder().
withCapabilities(webdriver.Capabilities.chrome()).
build();
describe('basic test', function () {
it('should be on correct page', function () {
var match = 'webdriver - Google Search',
title = '';
driver.get("http://www.google.com");
driver.findElement(webdriver.By.name("q")).sendKeys("webdriver");
driver.findElement(webdriver.By.name("btnG")).click();
// wait for page title, we know we are there
waitsFor(function () {
driver.getTitle().then(function (_title) {
title = _title;
});
return title === match;
}, 'Test page title, so we know page is loaded', 6000);
// test title is correct
runs(function () {
expect(title).toEqual(match);
});
});
});
正如您在自己的回答中所说,问题在于您没有等待页面加载。我真的不喜欢driver.wait的方法名,因为这意味着它将在继续之前等待指定的时间量,但事实并非如此。如果你的承诺没有兑现,那只是一个暂停。要等待,您应该使用driver.sleep1000。然后您可以添加您的期望值,如下所示:
driver.sleep(1000).then(function () {
return driver.getTitle().then(function (title) {
expect(title).toBe('webdriver - Google Search');
done();
});
});
由于您在问题中使用了done,我假设Jasmine 2.0和done
希望这有帮助。正如您在自己的回答中所说,问题在于您没有等待页面加载。我真的不喜欢driver.wait的方法名,因为这意味着它将在继续之前等待指定的时间量,但事实并非如此。如果你的承诺没有兑现,那只是一个暂停。要等待,您应该使用driver.sleep1000。然后您可以添加您的期望值,如下所示:
driver.sleep(1000).then(function () {
return driver.getTitle().then(function (title) {
expect(title).toBe('webdriver - Google Search');
done();
});
});
由于您在问题中使用了done,我假设Jasmine 2.0和done
希望这能有所帮助。因此,进行建议的更改。。。失败:1个基本测试应该在正确的页面上消息:超时:等待规范完成Stacktrace 5000毫秒后超时:未定义在7.855秒内完成1个测试,1个断言,1个失败,0跳过。我想这是因为我们不再告诉jasmine一切都结束了。而且没有断言。。。如何将值返回给jasmine?您不需要完成回调。将其从it回调中删除。因此进行建议的更改。。。失败:1个基本测试应该在正确的页面上消息:超时:等待规范完成Stacktrace 5000毫秒后超时:未定义在7.855秒内完成1个测试,1个断言,1个失败,0跳过。我想这是因为我们不再告诉jasmine一切都结束了。而且没有断言。。。如何将值返回给jasmine?您不需要完成回调。将其从it回调中删除。