Javascript 量角器-获取元素的子元素?

Javascript 量角器-获取元素的子元素?,javascript,angularjs,selenium,typescript,protractor,Javascript,Angularjs,Selenium,Typescript,Protractor,我试图访问ng repeat元素的子元素,但在执行此操作时遇到问题 我到处寻找这个问题,我找到的解决方案对我来说并不适用。其中一个解决方案是这样做: var parent = element(by.repeater('')); var child = parent.element(by.....); 当我尝试子元素时,我看不到父元素上的元素函数 如果您看到上面的屏幕截图,您将看到我尝试测试的页面代码的结构 我需要访问化身图像的alt属性并获取其值(即用户的用户名) 我想到的一件事是在ng r

我试图访问ng repeat元素的子元素,但在执行此操作时遇到问题

我到处寻找这个问题,我找到的解决方案对我来说并不适用。其中一个解决方案是这样做:

var parent = element(by.repeater(''));
var child = parent.element(by.....);
当我尝试子元素时,我看不到父元素上的元素函数

如果您看到上面的屏幕截图,您将看到我尝试测试的页面代码的结构

我需要访问化身图像的alt属性并获取其值(即用户的用户名)

我想到的一件事是在ng repeat行上使用
.getInnerHTML()
,这将返回一个包含所有代码的字符串。从那里我可以通过字符串操作找到
alt
属性及其值,但这似乎太残忍了,我相信一定有更好的方法

我只想从中继器中获取第4行,并获取第4行用户的用户名,这就是我真正想要做的。

试试这个

var parent = element(by.repeater('f in feed'));
var child = parent.all(by.xpath('//img[@alt="Pundeep"]')).first()
(或)


您可以使用量角器中的
element.all()
get()
定位器直接获取它。以下是如何-

var child = element.all(by.repeater('parent_locator')).get(3); //gets 4th element in repeater. Its a 0 based index.
child.getAttribute('alt').then(function(user){
    var username = user; //username contains the alt text
});

希望这有帮助。

这个例子可以帮助:

return element(by.css('select.custom-select:nth-child(1) option[value="12"]'));
可以使用n-child()选择器访问子元素。
在我的示例中,我使用了一个具有2个相同类的select的插件,我想在select 1中单击一个已定义的选项,在select 2中单击一个已定义的选项。

在量角器元素文档中,它给出了这样一个查找子元素的示例,这与链接元素查找相同:

// Chain 2 element calls.
let child = element(by.css('.parent')).
    $('.child');
expect(child.getText()).toBe('Child text\n555-123-4567');

// Chain 3 element calls.
let triple = element(by.css('.parent')).
    $('.child').
    element(by.binding('person.phone'));
expect(triple.getText()).toBe('555-123-4567');

// Or using the shortcut $() notation instead of element(by.css()):

// Chain 2 element calls.
let child = $('.parent').$('.child');
expect(child.getText()).toBe('Child text\n555-123-4567');

// Chain 3 element calls.
let triple = $('.parent').$('.child').
    element(by.binding('person.phone'));
expect(triple.getText()).toBe('555-123-4567'); 

.$

谢谢你的帮助。但是我正在尝试做一些不同的事情,例如,我想在repeater中获取第4个元素(或者上面示例中的第一个元素),然后获取alt属性的值,看看它是否是正确的用户名。1.在中继器第四排,2。获取用户名3的图像的alt标记的值。将该值保存在变量中供以后使用。虽然此代码段可能会解决此问题,但它没有解释为什么或如何回答此问题。请,因为这确实有助于提高你的文章质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。
// Chain 2 element calls.
let child = element(by.css('.parent')).
    $('.child');
expect(child.getText()).toBe('Child text\n555-123-4567');

// Chain 3 element calls.
let triple = element(by.css('.parent')).
    $('.child').
    element(by.binding('person.phone'));
expect(triple.getText()).toBe('555-123-4567');

// Or using the shortcut $() notation instead of element(by.css()):

// Chain 2 element calls.
let child = $('.parent').$('.child');
expect(child.getText()).toBe('Child text\n555-123-4567');

// Chain 3 element calls.
let triple = $('.parent').$('.child').
    element(by.binding('person.phone'));
expect(triple.getText()).toBe('555-123-4567');