我想知道当你不知道链接的数量时,是否有办法在Protractor中选择多个链接。目前我有一个表,其中包含我必须选择的多个(数量未知)链接(单击并移动页面),然后通过一系列过程进行我正在编写的测试:
<table border="0" class="bodyTable">
<tbody><tr class="a">
<th>Name</th>
<th>Description</th></tr>
<tr class="b">
<td><a href="Link3">Link1</a></td>
<td>-</td></tr>
<tr class="a">
<td><a href="Link3">Link2</a></td>
<td>-</td></tr>
<tr class="b">
<td><a href="Link3">Link3</a></td>
<td>-</td></tr>
<tr class="a">
<td><a href="Link4">Link4</a></td>
<td>-</td></tr>
</tbody>
问题是(我正在异步使用Protractor,因为这是一个非Angular应用程序),因为链接后面的页面大部分是相同的,所以如何选择未知列表中的每个元素而不重写荒谬的代码量。
我以前的方法围绕计算表中的tr并启动一系列循环,但这很笨拙,而且只是错误的代码:
//something like this
elements(by.tagName('tr')).count().then(function(numberOfTRs) {
for(int i = 1; i <= numberOfTRs; i++)
elements(by.tagName('tr')).get(i);
});
然而,承诺在页面加载后继续,当然会产生错误。应该有一种等待的方法(不使用browser.sleep(...))但是我不确定该怎么做。通常情况下我会研究这个问题,但我甚至不知道要搜索什么(我猜测&#34;白痴以不同于其设计的方式使用量角器&#34;会出现太多)。
提前致谢...
编辑注:
理想的功能可以这种方式运作
element(whatever).all(listsoflinks).someFunction(function (elementToUse, index) {
//...do stuff....
//....return to page....
});
我能找到的最接近的东西是&#34;每个&#34;功能,但它崩溃了错误:
Failed: Element not found in the cache - perhaps the page has changed since it was looked up For documentation on this error, please visit: http://seleniumhq.org/exceptions/stale_element_reference.html Build info: version: '2.48.2', revision: '41bccdd', time: '2015-10-09 19:59:12' System info: host: 'BAHCND4397GQF', ip: '10.138.1.15', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_72' Driver info: driver.version: unknown
所以,显然这个功能是&#34;失去&#34;页面更改发生时的立足点
我把一个计数器(console.log)放在&#34;每个&#34;当然,它起作用,好像它不是承诺的一部分......
答案 0 :(得分:1)
如何将链接收集到数组中,遍历数组并导航到每个URL:
$$("table.bodyTable tr td a").getAttribute("href").then(function(links) {
for(int i = 0; i <= links.length; i++) {
browser.get(links[i]);
// do smth
}
});