10

我似乎无法让 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错误:未定义角度(会话信息:chrome = 30.0.1599.69)(驱动程序信息:chromedriver = 2.2,平台= 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 Capabilities [{platform=XP, acceptSslCerts=true, javascriptEnabled =true, browserName=chrome, chrome={chromedriverVersion=2.2}, 可旋转=false, locationContextEnabled=true, 版本=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 属性,我尝试将它移到正文中,并在 html 标签上单独保留 ng-app 属性,但结果是一样的。有人知道为什么会失败吗?

编辑:只是一些可能有帮助的注释。我已经更新了上面的测试以包括手动引导工作。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>
4

3 回答 3

9

我不太确定是否要在其中做一个beforeEach()it()但除此之外,您是否尝试过等待一段时间?显然,我的意思是 aptor.waitForAngular()或 a 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');

编辑:量角器现在公开browser为全局,因此您可以使用browser.get('index.html#/foo')browser.wait()等。

于 2013-10-24T14:32:17.773 回答
3

尝试将其包含在您的测试文件中:

browser.ignoreSynchronization = true;

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

于 2015-07-14T10:38:32.023 回答
0

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

我在您的配置文件中看到rootElement设置为“html”。

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

于 2014-07-18T13:54:48.520 回答