Javascript E2E测试-WebdriverJS、硒和茉莉

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方法——没有这个,

好的,我遵循了几个稍有不同的示例,正如您在下面的注释代码中所看到的。他们都声称工作,但我不能让他们这样做

我正在使用; -selenium Web驱动程序 -jasmine节点报告器修复jasmine节点错误

因此,这是一个非常简单的异步测试,打开Google并搜索,然后获取页面标题

问题; 返回的页面标题是Google主页,而不是搜索结果页面。浏览器最终显示在搜索结果页面上

代码

结果

所以有人说我需要延长茉莉花的超时时间,这没什么区别

其他人说你需要Jasmine done方法——没有这个,测试就不能完成

我不明白为什么等待不等待无论提供什么超时,结果都会立即返回。

请参阅- 内部函数将返回driver.wait将等待的承诺,并将其值true/false作为等待条件

你应申请的更改是—

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回调中删除。