在量角器中选择多个链接

Selecting Multiple links in protractor

本文关键字:链接 选择 量角器      更新时间:2023-09-26

我想知道当您不知道链接的数量时,是否有办法在量角器中选择多个链接。 目前,我有一个包含多个(数量未知)链接的表格,我必须选择(单击并移动页面),然后经历一系列过程才能完成我正在编写的测试:

<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>

问题是(我正在异步使用量角器,因为这是一个非 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(...)),但是我不确定该怎么做。 通常我会研究这个问题,但我什至不知道要搜索什么(我猜"白痴绑在设计之外使用量角器"会出现很多)。

提前感谢...

编者按:

理想的函数将以这种方式工作

element(whatever).all(listsoflinks).someFunction(function (elementToUse, index) {
//...do stuff....
   //....return to page....
});

我能找到的最接近的东西是"Each"函数,但它因错误而崩溃:

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

因此,很明显,当页面更改发生时,该功能正在"失去"其立足点

我在"每个"函数中放了一个计数器(控制台.log),当然,它会飞过,就好像它不是承诺的一部分......

如何将链接收集到一个数组中,遍历数组并导航到每个 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
    }
});