如何在Jasmine中通过类名获取Angular 2元素

use*_*058 27 unit-testing jasmine angular

我可以使用它获得元素

fixture.debugElement.query(By.css('h1'));
Run Code Online (Sandbox Code Playgroud)

但是,当我想通过类名获取元素时,我该怎么做.像这样的东西

fixture.debugElement.query(By.css('class="name"'))
Run Code Online (Sandbox Code Playgroud)

Pau*_*tha 63

By.css用来传递css选择器.所以任何你可以使用css的选择器,你都可以使用By.css.而一个类的选择器就是.classname(带句点).

By.css('.classname')          // get by class name
By.css('input[type=radio]')   // get input by type radio
By.css('.parent .child')      // get child who has a parent
Run Code Online (Sandbox Code Playgroud)

这只是一些例子.如果您了解css,那么您应该知道如何使用选择器.

编辑:By.css()确保使用import { By } from '@angular/platform-browser';

  • 它在角5和茉莉上对我不起作用,我得失败:由未定义.有任何想法吗? (3认同)
  • 对不起我们需要的功能,从'@ angular/platform-b​​rowser'导入{By}; (2认同)

Rya*_*yan 10

确保By是从@angular/platform-b​​rowser导入的,而不是protractor


小智 8

我更喜欢您的 DOM 元素上的用户 ID,然后在 angular2 单元测试中,您可以调用如下所示的内容来获取所需 DOM 元素的参考并测试您喜欢的内容。

//typscript syntax

fixture = TestBed.createComponent(<your component>);

let result = fixture.nativeElement.querySelector('<id attribute name of html element>');

expect(result.id).toEqual("id  of your DOM element.").
Run Code Online (Sandbox Code Playgroud)

希望这有帮助。


小智 8

只是添加一些其他有用的方式来选择元素:

// get element with multiple classes

fixture.debugElement.query(By.css('.className1.className2'));


// get a certain element from a group of elements with the same class name

fixture.debugElement.queryAll(By.css('.className'))[1];
Run Code Online (Sandbox Code Playgroud)