量角器代码提取多段文本

时间:2017-10-26 23:25:51

标签: javascript selenium protractor

如何一次获取所有段落(p)的值 例如下面是我的检查视图的样子

"测试样本一。"

"测试样本二。"

及以下是我的代码示例,用于提取id' run'

的值

browser.findElement(by.css(' [ID =运行]&#39))。gettext的()

这只是提取第一个值,或者我可以修改并获得id的第二个值..我需要的是我需要同时获取两个值..在同一行代码中..你能不能指教

1 个答案:

答案 0 :(得分:0)

虽然错过了一个html示例以及您想要提取的更多描述,但我会尝试一下。

一般情况下,您可以/应该使用element.all(by.css()),而不是$$(),而不是browser.findElements,除非您确切知道,为什么使用findElementsRead some details about the difference here

然后正如评论中所提到的那样,有一个findElements()see API-Doc for findElements() here),返回符合条件的所有值的数组。只是您无法立即使用getText(),因为您获得了一系列元素,而getText()需要一个元素(see API-Doc for getText() here)。因此,您需要通过一些循环。

如果不了解足够的背景,可以选择一小部分想法。

var allP = new Array();
var allPString = null; //if one long string is desired
//here I'm using now element.all() instead of browser.findElements
var allPEl = $$('p#run'); //equal to element.all(by.css('p[id=run]')); //returns array of all found elements
var allPElBrowser = browser.findElements(by.id('run')); //returns array of all found elements
var i = allPEl.length();
var j = 0;

allPEl.each().getText().then(function(text){  //getAttribute('value') instead of getText(), if getText doesn't work.
    allP.push(text); //add it to Array
    allPString += text+' '; //add to String with a space at the end
    j++; //counter
    if(i === j-1){continueTest()}; //call continuation at the end of last loop, due to asynchronous nature of 'then()'.
});

continueTest = function(){
    allP.toString() //in case of comma separated list from Array is desired
    // here comes the rest of your test case logic
};

请注意,我假设您需要已解决的承诺,因此<p>的内容将继续。

如果您可以继续使用<p> - 对象数组,稍后您将在expect()内解决所有问题$$('p#id');

如果解决方案对您不起作用,请告诉我,哪些部分仍然缺失或出现问题。