我正在使用 Protractor 编写测试,我想了解如何测试电子邮件链接。我的意思是,测试普通链接很容易,因为您只需查看新 URL。但是当您单击电子邮件链接时,您可以转到外部电子邮件提供商,所以有什么解决方案吗?谢谢
我试图运行firsttest.js:
// firsttest.js
describe('angularjs homepage', function() {
var firstNumber = element(by.model('first'));
var secondNumber = element(by.model('second'));
var goButton = element(by.id('gobutton'));
var latestResult = element(by.binding('latest'));
beforeEach(function() {
browser.get('http://juliemr.github.io/protractor-demo/');
});
it('should have a title', function() {
expect(browser.getTitle()).toEqual('Super Calculator');
});
it('should add one and two', function() {
firstNumber.sendKeys(1);
secondNumber.sendKeys(2);
goButton.click();
expect(latestResult.getText()).toEqual('3');
});
it('should add four and six', function() {
// Fill this in.
expect(latestResult.getText()).toEqual('10');
});
it('test1', function() {
// Fill this in.
expect(true).toEqual(true);
});
it('test2', function() {
// Fill this in.
expect(true).toEqual(true);
});
it('test3', …Run Code Online (Sandbox Code Playgroud) 我回来了更多的量角器Q&A.所以,我在尝试查找幻灯片菜单中的元素时遇到了一个问题.
html片段:
<div class="ng-scope" ui-view="navmenu">
<nav class="menu slide-menu-left ng-scope">
<md-content class="md-default-theme" style="display: table" ng-click="slideMenuLeft()" tabindex="0">
<button class="md-button md-default-theme" ng-transclude=""
style="width:50%;height:72px;border-right:1px solid #ddd;border-bottom:1px solid #ddd"
ng-click="checkmap()" tabindex="0">
Run Code Online (Sandbox Code Playgroud)
以下是我尝试从此菜单中获取按钮的方法:
element(by.css('Button[ng-click="logoff()"]'));
element(by.xpath('/html/body/section/div[@class="ng-scope"]/nav[@class="menu slide-menu-left ng-scope"]/md-content/button[@ng-click="logoff()"]'));
Run Code Online (Sandbox Code Playgroud)
量角器不喜欢并继续告诉我这个:
Stacktrace:
ElementNotVisibleError: element not visible
(Session info: chrome=40.0.2214.115)
(Driver info: chromedriver=2.14.313457 (3d645c400edf2e2c500566c9aa096063e707c9cf),platform=Windows NT 6.3 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 31 milliseconds
Build info: version: '2.45.0', revision: '5017cb8', time: '2015-02-26 23:59:50'
Run Code Online (Sandbox Code Playgroud)
任何人都可以向我提出我可能做错的建议吗?
我需要做类似的事情:
expect(theElement.hasText()).toBe(true);
Run Code Online (Sandbox Code Playgroud)
你知道我怎么办吗?
我知道量角器中有一个"getText"函数,但是,我怎么能用呢?我该怎么办?:
expect(theElement.getText().lenght > 0).toBe(true);
Run Code Online (Sandbox Code Playgroud)
谢谢!
首先让我定义一下单元测试和端到端测试的含义。假设您有一个带有一堆Java类的程序:A调用B,B调用C,依此类推。
单元测试是针对A模仿B的测试,另外是针对B模仿C的测试,依此类推。
端到端测试是针对A的测试,该测试对A以及可传递的B和C进行测试。
为简单起见,并且为了使讨论集中于当前主题,而不是被次要细节分散注意力,让我们假设系统总体上是无状态的:您使用输入调用顶层(A),然后得到一个输出。给定输入只有一个有效输出。
需要明确的是,我这里没有包括外部系统,例如到其他服务器的RPC,数据库,外部状态(例如文件系统),任何类型的UI(“以编程方式点击Delete按钮来删除当前文档”)等等。我们只是在谈论同一过程中的一堆类。
现在,可以采用两种方法:
编写端对端测试,尝试覆盖所有可能的输入和状态。仅在需要时才编写单元测试,例如,如果某个特定的类没有通过端到端测试进行充分测试,或者端到端测试失败,并且发现编写单元测试来本地化错误很有帮助。但总的来说,目标是进行全面的端到端测试。
编写单元测试以详尽地测试每个类或组件。写一个端到端的测试作为事后的想法,或者根本不做。即使编写它,也不要尝试详尽地测试所有可能的输入。
我更喜欢(1),因为如果端到端测试通过并且是详尽无遗的,那么我知道该系统对于我测试的所有情况都适用。尽管每个类或组件均能正常工作,但它们之间的集成点仍可能存在错误,这是我看到的大多数错误发生的地方(对不起,我现在没有参考)。
那么,以下哪一项对您更有效-进行了全面的端到端测试或进行了完整的单元测试?为什么?请给出具体原因,以便我和其他读者自己评估答案。
如果这个问题更适合Programmer.stackexchange.com,请移至那里(主持人)。
有没有办法检查元素中是否有任何文本?我已经找到textToBePresentInElement但是这个函数检查指定的值,如果失败则不会返回正确的错误.
我通过API填充元素,稍后加载它,所以我希望浏览器等到元素中出现任何信息然后检查正确的值.
或者,当EC失败时,管理获取特定错误消息也非常有用:
browser.wait(EC.textToBePresentInElement(element(by.binding('myvar')), "expected"), 5000);
Run Code Online (Sandbox Code Playgroud) 在量角器,有一个“全球设立”方法调用onPrepare(),但我不能完全肯定是什么意思是“全球推倒” -有三个相关方法:onCleanUp,onComplete和afterLaunch测试执行后都被调用。
为什么它protractor有三种方法在测试运行后,叫什么名字?之间有什么区别onCleanUp,onComplete和afterLaunch?
我还注意到,存在一个“退出”事件,我们可以将回调附加到该事件(此处为示例):
protractor.on('exit', function (status) {
});
Run Code Online (Sandbox Code Playgroud) 如何检查元素未显示在量角器中?
我对带有返回 true 或 false 参数的通用函数感兴趣。我会在测试中多次使用它。
我正在为我的Angular组件编写一些量角器测试,当我尝试使用by.model选择输入元素时,不断收到错误"未知错误:未定义角度".
它奇怪,因为如果我这样做它工作正常和pases:
it('should have an input element for searching', () => {
var inputElement = element(by.model('searchText');
expect(inputElement).toBeDefined();
});
Run Code Online (Sandbox Code Playgroud)
但是当我尝试做这样的事情时,它会因角度未定义的错误而失败:
it('should filter the search text', () => {
var inputElement = element(by.model('searchText');
expect(inputElement).toBeDefined();
inputElement.clear()
inputElement.click();
inputElement.sendKeys('ICBC');
var tableLengthRow = element.all(by.css('.animate-repeat').count();
expect(tableLength).toBe(1);
});
Run Code Online (Sandbox Code Playgroud)
如果我替换这一行:
var inputElement = element(by.model('searchText');
Run Code Online (Sandbox Code Playgroud)
这一个:
var inputElement = element.all(by.tagName('input')).get(0);
Run Code Online (Sandbox Code Playgroud)
我把它留给测试通过.
有谁知道为什么上面的第一个测试使用by.model而不是第二个我实际点击该元素的测试?
然后我如何使用Webpack和npm在页面上定义角度?
谢谢
在 Docker 容器中运行 Cypress 测试套件时出现以下错误:
自动化客户端已断开连接。无法继续运行测试。
使用此命令,在cypress/browsers:node12.6.0-chrome75容器中运行:
cypress run --browser=chrome
end-to-end ×10
protractor ×8
testing ×6
javascript ×5
angularjs ×3
selenium ×2
unit-testing ×2
angular ×1
cypress ×1
docker ×1
jasmine ×1
reactjs ×1
webpack ×1