Javascript 量角器找不到角度
我似乎无法让量角器意识到Angular正在加载和运行。当它打开Chrome时,我的应用程序会在浏览器中完全加载,因此我知道Angular已正确加载并运行 配置文件:Javascript 量角器找不到角度,javascript,angularjs,selenium,jasmine,protractor,Javascript,Angularjs,Selenium,Jasmine,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/c
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
}
};
我只有一个测试,我正试图运行,它失败了,因为量角器无法找到角度
测试:
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();
});
});
这是我得到的错误:
未知错误: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:1EF7DCD7C5FC9C4E9E1DEDE50002ADF驱动程序信息:
org.openqa.selenium.chrome.ChromeDriver功能[{platform=XP,
acceptSslCerts=true,javascriptEnabled=true,browserName=chrome,
chrome={chromedriverVersion=2.2},rotatable=false,
locationContextEnabled=true,版本=30.0.1599.69,
CSSSelectorEnabled=true,databaseEnabled=true,handlesAlerts=true,
browserConnectionEnabled=false,WebStorage Enabled=true,
nativeEvents=true,applicationCacheEnabled=false,
takesScreenshot=true}]
我已经尝试将ng app属性移动到body标记(并相应地更改配置),但我得到了相同的错误。我们在html标记上也有一个ng控制器属性,我尝试将其移动到主体上,并将ng app属性单独保留在html标记上,但结果是相同的。有没有人知道为什么会失败
编辑:
只是一些可能有用的注释。我已经更新了上面的测试,以包括手动引导工作。Angular和所有模块的脚本标记位于页面底部,就在结束正文标记之前。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>
var$jq=jQuery.noConflict();
var$=jQuery.noConflict();
其中包括ng应用程序:
<!DOCTYPE html>
<html ng-app="prismApp" ng-controller="baseController">
<head>
我不太确定在,
it()
内做一个beforeach()
,但除此之外,你试过等一会儿吗?
显然,我指的是ptor.waitForAngular()
或ptor.wait()
在您的ptor.get()
之后尝试ptor.sleep(10000)
,看看这是否是一个计时问题
编辑:还可以查看以及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.get('index.html#/foo')
或browser.wait()
等。您是否使用ng应用程序引导角度应用程序?还是手动引导应用程序
我在配置文件中看到,rootElement
被设置为“html”
默认情况下,量角器假定应用程序的根将位于body标记上。如果
标记不是应用程序中的where angular bootstraps,请尝试将配置文件中的根元素更改为where angular first bootstraps(无论是手动还是使用ng app指令)。这确实有助于解决计时问题,并加快量角器的执行速度。尝试将其包含在测试文件中:
browser.ignoreSynchronization = true;
它会关闭您的测试与angular的同步并使其正常工作。加载angular时您是否自己进行引导?在测试中,不。我会尝试一下。不,您不需要自己进行引导-这只是问题的潜在原因。你能分享一下你的模板吗?加载ng应用程序的位置?ng应用程序位于HTML标记上(请参见上面的编辑)。模板只是HTML,在基本登录表单的按钮/字段上有几个ng-*属性。我们使用Bootstrap,但我不认为这会有什么不同。正如@Jmr所说,您不需要手动引导它。您确定服务器正在提供angular.js
(或angular.min.js
)文件吗?您的索引页是否包含在脚本中?当selenium将页面加载到浏览器中时,它似乎无法使用angular源代码…对于错误的测试感到抱歉。。。我已经改正了。但还是像以前一样跑。添加了sleep()之后,它现在安静地坐了10秒钟,然后我抛出了一个错误,其根源是它仍然找不到角度。我真的开始讨厌量角器了。我在手动引导应用程序时遇到了这个问题。你说你不是。我最终使用了ptor.driver.get('my-page')
而不是ptor.get('my-page')代码>我更新了我的答案。我做了之后感觉很脏,但它确实有效。最终通过的测试套件如下所示:description('homepage loads:',function(){var ptor;ptor=gragraptor.getInstance();ptor.driver.get(“);it('should load the prism homepage:',function(){var usernameField=ptor.findelelement(grantor.By.id('username));expect(usernameField.getText()).toEqual(“;”); });谢谢你的帮助!两点:第一,这个问题已经提出9个多月了,量角器从那时起已经多次迭代;第二,我已经尝试过你的建议,但它不起作用。另外,对ng app属性的位置进行笼统的假设是错误的,因为Angular允许它在任何地方,但更喜欢它在e上它是HTML还是BODY。如果我把它设为BODY,那个么量角器就更好了