2017-02-11 58 views
0

所以,我对这两种Javascript编程都是全新的,并刚开始使用QA测试。我现在的目标非常简单。我希望确保在我从列表中进行选择之前,所有元素都已加载到中继器中。在继续我的测试之前,我想等到第一个和最后一个元素出现。中继器的打印元素

我知道可能有更好的方法来做到这一点,随时向我提出建议。我一直在网上查找,并找到代码片断,详细说明如何在中继器中向控制台打印元素的值。

我想我会首先尝试打印出第一个和最后一个元素,以确保我正确地得到它们。我这样做:

var repeaterElements = element.all(by.repeater(repeaterObj)); 
var text = repeaterElements.first().toString(); 
console.log(text); 

我的目标只是简单地打印第一个元素。不过,我得到它来打印[对象对象]。我是否通过这个错误推理?我认为'.first()'会给我中继器中的第一个元素!

-hopper

+0

我想如果你把'.toString()'关掉,你会输出你想要的对象。 –

回答

1

我不是100%肯定,你想要什么,但我认为这是它。这应该通过一个中继器,选择所有元素,获取这些元素的文本并将其输出。如果你真的要做除安慰以外的任何事情,请记住遵守你的承诺!

element.all(by.repeater(repeaterObj)).each(function(obj){ 
    obj.getText().then(function(text){ 
     console.log(text) 
    }); 
}); 
+0

嘿,谢谢你的帮助!这正是我想要做的。我仍然试图牢牢把握JS,你能解释一下.each()如何实现一个函数吗? 换句话说,我很困惑.each()知道这个'obj'是从哪里来的。同样,在console.log中传入的参数'text'在哪里使用?从逻辑上讲,它是做obj.getText()的解决方案,但我想我问的是如何知道将该值传递给'.then(function(text){console.log(text)}中的参数);'? 希望这是有道理的。我发现这个问题很难说短语haha – Hopper

+0

该方法每个都只是一个方法上的element.all在这种情况下 - 它需要一个函数并将每个元素传递到第一个参数(我认为它也需要第二个参数,成为指数)。在getText的情况下,它是从“each”返回的元素上的一个可用方法,它返回一个我们可以“然后”离开的承诺。它可以帮助您调出各个元素,并且您可以看到什么方法可用于这些元素。 – jdgower

+0

嘿,我知道我保持这个线程长一点,但我认为它与中继器有点相关,所以我想我会问你。我想写一个快速辅助函数,在点击一个元素之前等待中继器中的第一个元素和最后一个元素可见/完全加载。我有: 'var EC = protractor.ExpectedConditions; var repeaterElements = element.all(by.repeater(repeaterObj));返回browser.wait(EC.visibilityOf(repeaterElements.first())&& EC.visibilityOf(repeaterElements.last()),5000); ' 它似乎工作,但我想要一个正确的实施! :) – Hopper