我似乎无法使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 } };
我只有一个要运行的测试,但由于量角器找不到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,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,浏览器名称= 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,takesScreenshot = true}]
我尝试将ng-app属性移到body标签(并相应地更改配置),但是遇到了同样的错误。我们在html标签上也有一个ng- controller属性,我尝试将其移到主体上,而在ngf标签上保留了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>
我不太确定是否要在a beforeEach()内进行操作,it()但除此之外,您是否尝试过等待一会儿?显然,我的意思是a ptor.waitForAngular()或a ptor.wait()?
beforeEach()
it()
ptor.waitForAngular()
ptor.wait()
尝试一下ptor.sleep(10000)之后ptor.get(),看看是否是定时的事情。
ptor.sleep(10000)
ptor.get()
编辑:还看一下量角器api及其wait()工作原理:
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');
ptor.driver.get('my-page');
ptor.get('my-page');
编辑:量角器现在公开browser为全局,因此您可以使用browser.get('index.html#/foo')或browser.wait()等。
browser
browser.get('index.html#/foo')
browser.wait()