问题标签 [protractor]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
protractor - Protractorjs 测试 - 如何使用 :contains('someText') - 可能错误地转义字符串
我有一个需要测试的角度形式,我想通过它的文本节点内容选择一个没有身份的项目。在其他平台上的 jquery 和 selenium 中,我能够使用一个名为 :contains() 的特殊 css 选择器,它可以让我找到东西
当我运行这个时,我得到一个关于无效字符串的词法错误。我尝试了多种方法来转义字符串中的引号。我还尝试了一个 xpath 表达式,它在引入引号后做了同样的事情。它看起来像这样:
那以同样的方式失败了。
1:量角器中是否有 :contains selenium 功能?
2:我是否错误地转义了我的字符串?
请不要告诉我将身份附加到对象上。我不允许修改标记。
unit-testing - 使用 protractorjs 和 mocha 如何阅读网站上的所有链接?
我正在尝试使用量角器和摩卡阅读网站上的所有 HREF 链接
我没有与任何技术“结婚”,但我的印象是这些是当前用于驱动硒的同类最佳技术。
我正在使用项目附带的量角器 Mocha 示例文件,我从示例代码中调整了该文件以读取:
似乎正在发生的是“元素”列表立即返回,而不是在页面加载后返回。
我如何在硒+量角器中处理这个问题?
javascript - 用量角器模拟和存根
我想用量角器测试我的角度应用程序。该应用程序有一个与服务器对话的 API 模块在这些测试期间,我想模拟这个 Api 模块。我不想进行完整的集成测试,而是使用来自 API 的预期值的用户输入进行测试。这不仅可以使客户端测试更快,还可以让我测试边缘情况,例如连接错误。
我怎么能用量角器做到这一点?我刚开始设置集成测试。
我使用了 npm protractor 模块,安装了 selenium,调整了默认配置并使用了onProtractorRunner.js来验证我的设置是否有效。
推荐的模拟方式是什么?我假设模拟必须在浏览器中完成,而不是直接在测试文件中。我假设测试文件中的命令是量角器特定的,并将发送给 selenium runner。因此我不能在会话和测试期间共享 javascript 对象。
我以某种方式期望我需要一个像sinon.js这样的间谍库,或者它是否已经包含在量角器中?
编辑:我在量角器问题跟踪器中读到了这个问题,这可能是一种方法。基本上你在测试中编写了一个模拟模块,它被发送到浏览器/应用程序范围内执行。
编辑:这里有更有希望的问题。第一个讨论将 Mocks 添加到 Angular App中。第二个谈论模拟后端。
这看起来非常不错,在这种情况下,Angular 应用程序将保持其原始形式。但是,这目前仅适用于已弃用的 ng-scenarios。
angularjs - 通过 Grunt 将 Protractor 与 Yeoman 集成
我想将 Protractor 与 Yeoman 生产的脚手架集成。我遵循了一个教程,其中较旧scenario-runner
的用于设置 e2e 测试(通过grunt
)。
我想升级我的脚手架并改用 Protractor。
有什么想法吗?
javascript - 如何为(Angularjs)Web 应用程序进行集成测试
我正在开发一个 Web 应用程序。它由 2 个部分组成。一个节点休息服务器和一个 angularjs 客户端。
该应用程序的结构如下:Rest Server <--> Api Module <--> Angular App
该服务器目前经过良好测试。我有单元测试和集成测试。集成测试正在访问一个真实的数据库并通过 http 调用其余的 api。我认为这是服务器测试所能达到的最高水平。集成测试也运行得很快。我非常有信心测试服务器的方式足以满足我的用例,并且我对结果感到满意。
但是我正在努力如何测试 angularjs 应用程序。我对相关指令和模块进行了单元测试。写这些不是问题。
我想编写涵盖用户场景的集成测试。类似于注册场景:用户访问网站,进入注册表单,并提交包含数据的表单。
angularjs 团队正在从ng-scenarios转移到protractor。Protractor 正在使用 Selenium 运行测试。因此有两个范围:应用范围和测试范围。
现在我可以想到我可以使用的三种不同的抽象。而且我不确定哪一个最适合我。
- 模拟 Api 模块
- 模拟其余服务器
- 使用完整的服务器
模拟 Api 模块
在这种情况下,我不需要设置服务器。所有交互都在浏览器中运行
优势:
- 不需要服务器
坏处:
- 该 api 在浏览器范围内,我必须篡改它。
我真的很喜欢这个解决方案,但我发现很难模拟 Api。需要在浏览器范围内修改 Api。因此我需要将修改从测试发送到浏览器。这可以做到,但是我看不到如何mockedApi.method.wasCalledOnce()
在测试范围内运行断言
模拟其余服务器
优势:
- 客户将保持不变
- 只需处理一个范围
坏处:
- 必须设置休息路线
我可以在 nodejs 中创建一个完整的模拟休息服务器。量角器测试是用nodejs编写的,因此可以在测试中完成对服务器的控制。在我运行测试之前,我可以告诉服务器如何响应。像这样的东西:server.onRequest({method: 'GET', url: '/'}).respondWith('hello world')
然后我可以做这样的断言wasCalledOnce
将完整的服务器与数据库一起使用
每个测试都使用完整的服务器运行,并且可以将元素添加到数据库中。每次测试后,可以查看数据库中的预期元素
优势:
- 可以肯定的是,如果这些测试正在运行,则应用程序在测试用例中可以正常运行
坏处:
- 我已经与其余服务器进行了相当激烈的集成测试。这感觉就像再次做同样的事情。
- 设置取决于完整的服务器
目前的结论
- 模拟 Api 将完全分离服务器和客户端。
- 使用 Mock Api 将是更高级别的测试,但需要假服务器
- 做一个完整的集成测试会提供最好的可靠性,但这也高度依赖于服务器代码
我应该选择什么?你会怎么做?
angularjs - 执行量角器 e2e 测试时出错
这是我的 refenceConf.js 文件,我在规范中给出了 testapp_spec,js,我把它们都放在了同一个地方
这是我的 testapp_spec.js,我正在编写一个测试用例来显示主页
当我执行此操作时,我收到一个错误,例如未定义角度帮助我摆脱此错误
angularjs - 如何解决 webdriver 中的竞争条件
我有一个混合使用 angular 和 asp.net 的应用程序。我的问题是通过设置 window.location 重定向主页,然后从服务器请求所需的数据和页面。
以前情况并非如此,所有路由都是通过 Angular 应用程序完成的。然而,由于要求,应用程序路由必须更改为现在的样子。
现在因为应用程序需要服务器端请求/响应(我相信),这导致我的测试出现竞争条件,因为我每 5 次测试只收到一次预期结果。
目前我无法提供代码来解释我的情况。但是,我将在今天晚些时候的编辑中提供一些代码。
我现在可以提供的唯一代码是正在运行的测试。尽管我不相信如果没有运行应用程序的代码,这会有所帮助。
angularjs - 使用 Firefox 或 Safari 在 Protractor 中进行 E2E 测试?
我正在使用 Protractor 测试我的 angular.js 应用程序,它在 Chrome 中运行良好。我在设置它和学习 jasmine 的额外 webdriver 语法时遇到了一些问题,但现在我掌握了它,并且在 Chrome 中运行和传递了许多测试。
有谁知道在 Firefox 或 Safari 或 IE 或 Opera 中运行 Protractor 的任何方法?我希望能够在更多浏览器上运行这些测试,而不仅仅是 Chrome。我查看了 GitHub 上的 Protractor 文档,但它只显示chromeDriver
. 是否有 Firefox 驱动程序或 Safari 驱动程序之类的东西?
PS。我认为这不会有太大帮助,所以我不会发布我当前的配置文件,但如果它有用,请告诉我,我可以在这里发布。
javascript - 在 IE 9 上等待异步脚本超时已过期
我正在尝试在 Internet Explorer 9 上运行一些测试(使用 Protractor) - 每个包含“driver.executeScript”的测试都会给出错误:等待异步脚本超时(警告:服务器未提供任何堆栈跟踪信息)。其他测试工作得很好。
似乎 IE 不理解我在函数末尾添加的超时限制(20000 毫秒) - 超时在约 11 秒后到期。
是否有任何 WebdriverJS 代码行让它等待异步执行?
所有测试都可以在 Firefox 上完美运行。
代码:
javascript - 量角器找不到 Angular
我似乎无法让 Protractor 意识到 Angular 已加载并正在运行。当它打开 Chrome 时,我的应用程序在浏览器中完全加载,所以我知道 Angular 已正确加载并运行。
配置文件:
我只有一个要运行的测试,但它失败了,因为 Protractor 找不到 Angular。
考试:
这是我得到的错误:
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" 属性。如果我尝试在测试中手动引导应用程序,我会得到以下信息:
让我担心的另一件事是我们使用的模块之一绝对需要“$”来映射到 jQuery,所以我们像这样映射它:
包含 ng-app 的地方: