javascript - 在 Protractor 中选择多个链接

标签 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);
});

但是,页面加载后, promise 会继续,当然会产生错误。应该有一种方法可以等待(不使用 browser.sleep(...)),但是我不确定该怎么做。通常我会研究这个问题,但我什至不知道要搜索什么(我猜“白痴以不同于设计的方式使用 Protractor ”会出现很多)。

提前致谢...

编者注:

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

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

So, obviously the function is "loosing" its footing when the page change happens

我在“each”函数中放置了一个计数器(console.log),当然,它会飞过,就好像它不是 promise 的一部分一样......

最佳答案

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

关于javascript - 在 Protractor 中选择多个链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36091895/

相关文章:

javascript - Date.parse 的正确日期格式应该是哪种?

firefox - Webdriver 2.20和Firefox 11(无法绑定(bind)到锁定端口7054)

selenium - 从 Selenium Webdriver 中的搜索结果中获取所有元素的列表

javascript - 如何让 Protractor 按回车键?

javascript - Trim 不是 Protractor 中的函数

javascript - Protractor 似乎不适用于异步页面

javascript - Mobx- react : Inject and Observe together

javascript - 为什么 `this===window` 给我假的?

javascript - Firebug 在骗我吗?

java - Selenium 等待 AJAX 编辑页面上的文本