javascript - Protractor 找不到 Angular

标签 javascript angularjs selenium jasmine protractor

我似乎无法让 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 error: angular is not defined (Session info: chrome=30.0.1599.69) (Driver info: chromedriver=2.2,platform=Windows NT 6.1 SP1 x86_64) (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 19 milliseconds Build info: version: '2.35.0', revision: 'c916b9d', time: '2013-08-12 15:42:01' System info: os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.7.0_21' Session ID: 1ef7dcd7c5fc9c4e9e1dede050002adf Driver info: org.openqa.selenium.chrome.ChromeDriver Capabilities [{platform=XP, acceptSslCerts=true, javascriptEnabled=true, browserName=chrome, chrome={chromedriverVersion=2.2}, rotatable=false, locationContextEnabled=true, version=30.0.1599.69, cssSelectorsEnabled=true, databaseEnabled=true, handlesAlerts=true, browserConnectionEnabled=false, webStorageEnabled=true, nativeEvents=true, applicationCacheEnabled=false, takesScreenshot=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>

最佳答案

我不太确定在 it() 中执行 beforeEach() 但除此之外,您是否尝试过等待一段时间? 显然,我的意思是 ptor.waitForAngular() 还是 ptor.wait()

在你的 ptor.get() 之后尝试一个 ptor.sleep(10000) 看看它是否是一个时间问题。

编辑:也看看 protractor 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()

关于javascript - Protractor 找不到 Angular,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19391813/

相关文章:

javascript - jquery timepicker设置时间点击功能

javascript - 我有一个包含对象的多维数组,需要使用 javascript 计算每列的总和

java - 检查 Web 元素值的 boolean 方法

javascript - 使用 Javascript 将对象数组排序为配对对象数组

javascript - 如何将指针列指向 Parse 中单独类中的特定对象?

javascript - 试图将一个 div 放在 slider 旁边

javascript - 如何防止模型失效?

angularjs - 将 Angular ng-attr 用于 disabled 属性

java - 如何在 selenium webdriver 上同时断言或验证多个必需的错误消息

python - 使用 selenium 和 phantomJS 更改 "user-agent" header