一尘不染

量角器找不到Angular

selenium

我似乎无法使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>

阅读 308

收藏
2020-06-26

共1个答案

一尘不染

我不太确定是否要在a beforeEach()内进行操作,it()但除此之外,您是否尝试过等待一会儿?显然,我的意思是a
ptor.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()等。

2020-06-26