Javascript 获得网页标题的承诺永远无法用量角器和茉莉花解决

Javascript 获得网页标题的承诺永远无法用量角器和茉莉花解决,javascript,angularjs,selenium-webdriver,jasmine,protractor,Javascript,Angularjs,Selenium Webdriver,Jasmine,Protractor,下面的量角器/jasmine测试代码只打印出1和2,然后挂起并超时 这似乎是button元素上的click()操作或浏览器对象上的getTitle方法上的承诺有问题,或者两者都有问题 有没有人能解决这个问题,或者有更好的方法来做我正在做的事情 代码: it('should allow successful login', function() { browser.get('http://192.168.0.100/src/'); browser.waitForAngular

下面的量角器/jasmine测试代码只打印出1和2,然后挂起并超时

这似乎是button元素上的click()操作或浏览器对象上的getTitle方法上的承诺有问题,或者两者都有问题

有没有人能解决这个问题,或者有更好的方法来做我正在做的事情

代码:

it('should allow successful login', function() {   
    browser.get('http://192.168.0.100/src/');
    browser.waitForAngular();

    var titlePromise = browser.getTitle();
    titlePromise.then(function(text){
      console.log("1**************", text);
    });

    var titlePromise = browser.getTitle();
    titlePromise.then(function(text){
      console.log("2**************", text);
    });

    element.all(by.model('credentials.username')).first().sendKeys('foo');
    element.all(by.model('credentials.password')).first().sendKeys('bar');
    var loginBtn = element.all(by.cssContainingText('.btn', 'Login')).first();
    loginBtn.click();
    browser.sleep(5000);

    var titlePromise = browser.getTitle();
    titlePromise.then(function(text){
      console.log("3**************", text);
    });    
  });
}); 
错误:

it('should allow successful login', function() {   
    browser.get('http://192.168.0.100/src/');
    browser.waitForAngular();

    var titlePromise = browser.getTitle();
    titlePromise.then(function(text){
      console.log("1**************", text);
    });

    var titlePromise = browser.getTitle();
    titlePromise.then(function(text){
      console.log("2**************", text);
    });

    element.all(by.model('credentials.username')).first().sendKeys('foo');
    element.all(by.model('credentials.password')).first().sendKeys('bar');
    var loginBtn = element.all(by.cssContainingText('.btn', 'Login')).first();
    loginBtn.click();
    browser.sleep(5000);

    var titlePromise = browser.getTitle();
    titlePromise.then(function(text){
      console.log("3**************", text);
    });    
  });
}); 
错误:等待量角器与页面同步时超时 11秒后。请看


我可能没有足够的信息,但这里有一些东西可以尝试:

  • 很明显,您是否阅读了每个会导致链接文档超时的案例?若你们的Angular应用程序中有$timeout,那个么量角器将永远不会加载

  • 您确定选择的登录名正确吗?您可能希望以交互方式测试量角器:。从量角器目录/节点\模块/量角器:

    $node./bin/elementexplorer.js

  • 如果您正在登录并转到另一个页面,请不要等待下一个页面加载,而是等待页面更改:

    browser.driver.wait(函数(){
    返回browser.driver.getCurrentUrl().then(函数(url){
    返回/登录url/.test(url);
    });
    });


  • 您忘记了与文档的所有交互都是通过。您的代码应该与下面未测试的代码块类似

    还要注意的是,
    browser.waitForAngular
    是“量角器在每次WebDriver操作之前自动应用此命令。”

    我不知道你为什么这么频繁地调用
    getTitle
    ,但是我把它放在了里面,以防它让重构更清晰

    it('should allow successful login', function() {   
        browser.get('http://192.168.0.100/src/')
        .then(function(){
            return browser.getTitle()
        })
        .then(function(text){
            console.log("1**************", text);
            return browser.getTitle();
        })
        .then(function(text) {
            console.log("2**************", text);
            return browser.getTitle()
        })
        .then(function (text) {
            console.log("3**************", text);
            element.all(by.model('credentials.username')).first().sendKeys('foo');
        })
        .then(function () {
            element.all(by.model('credentials.password')).first().sendKeys('bar');
        })
        .then(function () {
            element.all(by.cssContainingText('.btn', 'Login')).first().click();
        })
        .then(function () {
            browser.sleep(5000); // Better to use ExpectedConditions to wait something
        })
        .then(function () {
            var titlePromise = browser.getTitle();
            return browser.getTitle()
        })
        .then(function (text) {
            console.log("3**************", text);
        });
    });
    

    闻起来像你提到的问题1,因为我的应用程序中使用了$timeout、polling和$interval。但是,在运行这个测试的过程中,没有一个在使用,这让我很困惑。正在正确选择登录名。当chrome量角器启动时,我看着它工作。尝试了第三个,结果没有变化。这开始让我恼火了。5天的selenium实验,我还没有找到任何好的方法来测试我的应用程序。element是量角器特定的对象。前两项测试之所以有效,是因为它们是硒,而不是量角器。我猜量角器无法加载。我强烈建议大家通读那个文档。我放弃了这个想法,决定自己使用SeleniumWebDriver。我终于让它工作了,没有跳过任何东西或挂在任何地方。老实说,很多硒元素看起来像是西部的超级野性,令人失望,也令人沮丧。angular如何支持一个不适用于所有angular应用程序的测试框架!?很多人说登录页面使用selenium,登录后使用特定的量角器。是的,这是荒野的西部。当你在公司时间做实验时,情况还不错;)。