在量角器中选择多个链接

时间:2016-03-18 18:35:05

标签: javascript selenium protractor

我想知道当你不知道链接的数量时,是否有办法在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;当然,它起作用,好像它不是承诺的一部分......

1 个答案:

答案 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
    }
});