繁体   English   中英

量角器未能找到Angular

[英]Protractor fails to find Angular

我似乎无法让Protractor意识到Angular已加载并正在运行。 当它打开Chrome时,我的应用程序会在浏览器中完全加载,因此我知道Angular已加载并正常运行。

配置文件:

exports.config = {
seleniumServerJar: 'C:/Dev/PrismWeb/selenium/selenium-server-standalone-2.35.0.jar',

seleniumPort: null,

chromeDriver: 'C:/Dev/PrismWeb/selenium/chromedriver.exe',

seleniumArgs: [],

seleniumAddress: null,

allScriptsTimeout: 110000,

specs: ['c:/dev/prismweb/test/e2e/*.js'],

capabilities: {'browserName': 'chrome'},

baseUrl: 'http://localhost:8080',

rootElement: 'html',

jasmineNodeOpts: {
    onComplete: null,
    isVerbose: true,
    showColors: true,
    includeStackTrace: true,
    defaultTimeoutInterval: 30000
}
};

我只有一个测试,我试图运行它失败因为Protractor找不到Angular。

考试:

describe('homepage loads: ', function(){
var ptor;

    ptor = protractor.getInstance();

    beforeEach(function(){
        ptor.get('/');
    });

it('should load the prism homepage: ', function(){
    var usernameField = ptor.findElement(protractor.By.id("username"));
    //expect(usernameField).toBeDefined();
});
});

这是我得到的错误:

UnknownError:javascript错误:未定义angular(会话信息:chrome = 30.0.1599.69)(驱动程序信息:chromedriver = 2.2,platform = Windows NT 6.1 SP1 x86_64)(警告:服务器未提供任何堆栈跟踪信息)命令持续时间或超时:19毫秒构建信息:版本:'2.35.0',修订版:'c916b9d',时间:'2013-08-12 15:42:01'系统信息:os.name:'Windows 7',os.arch :'amd64',os.version:'6.1',java.version:'1.7.0_21'会话ID:1ef7dcd7c5fc9c4e9e1dede050002adf驱动程序信息:org.openqa.selenium.chrome.ChromeDriver功能[{platform = XP,acceptSslCerts = true,javascriptEnabled = true,browserName = chrome,chrome = {chromedriverVersion = 2.2},rotate = false,locationContextEnabled = true,version = 30.0.1599.69,cssSelectorsEnabled = true,databaseEnabled = true,handlesAlerts = true,browserConnectionEnabled = false,webStorageEnabled = true,nativeEvents = true,applicationCacheEnabled = false,takeScreenshot = true}]

我已经尝试将ng-app属性移动到body标签(并相应地更改配置)但我得到了同样的错误。 我们在html标签上也有一个ng-controller属性,我尝试将其移动到正文并将ng-app属性单独留在html标记上,但结果是一样的。 有没有人知道为什么会失败?

编辑:只是几个可能有帮助的笔记。 我已经更新了上面的测试,包括手动引导工作。 Angular和所有模块的脚本标记位于页面底部,就在关闭BODY标记之前。 HTML标记仍然具有ng-app =“myApp”属性以及ng-controller =“baseController”属性。 如果我尝试在测试中手动引导应用程序,我会得到以下内容:

ReferenceError: angular is not defined

另一件令我担心的事情是我们使用的模块之一绝对需要将“$”映射到jQuery,所以我们将它映射为:

<script type="text/javascript">
    var $jq=jQuery.noConflict();
    var $=jQuery.noConflict();
</script>

包含ng-app的地方:

<!DOCTYPE html>
<html ng-app="prismApp" ng-controller="baseController">
<head>

我不太确定在a beforeEach()做一个beforeEach() it()但是除此之外,你试过一段时间吗? 显然,我指的是ptor.waitForAngular()还是ptor.wait()

尝试ptor.sleep(10000)的后ptor.get()只是为了看它是否是一个时间的事情。

编辑:还看一下量角器api以及wait()工作原理:

ptor.wait(function () {
  // Return a condition. Code will continue to run once it is true      
}, 10000); // Only do this for 10 seconds

编辑:尝试ptor.driver.get('my-page'); 而不是ptor.get('my-page');

编辑:Protractor现在将browser公开为全局,因此您只需使用browser.get('index.html#/foo')browser.wait()等。

尝试在测试文件中包含此内容:

browser.ignoreSynchronization = true;

它会关闭测试与角度的同步并使其正常工作。

您是否使用ng-app来引导Angular应用程序? 或者您手动引导您的应用程序?

我在配置文件中看到rootElement设置为'html'。

默认情况下,量角器假定应用程序的根目录在body标签上。 如果<html>标记不是应用程序中的angular bootstrap,请尝试将配置文件中的根元素更改为angular first bootstraps(手动或使用ng-app指令)。 这确实有助于解决时序问题,并加快量程器的执行速度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM