在页面上搜索元素,如果找不到元素,请选择Next

时间:2016-11-02 16:22:04

标签: selenium protractor

我有一张桌子,我有一些链接。由于此表非常动态,我想搜索链接。

@RequestScoped
public class C1 {
    ...  
}

@SessionScoped
public class C2 {
    @Inject
    private Provider<C1> provider;
    ...
    public void doSomething() {
        // Get the instance corresponding to the current request
        C1 c1 = provider.get();
        ...
    }
}

如果在当前页面上找不到,我想点击Next 30 records按钮获取下30条记录。

this.invoiceTable.element(by.cssContainingText('a','1616050'));

再次开始在下一页上搜索上一个链接。 我不知道如何实现这一点以及我应该为未找到的元素记录什么错误,以便它单击Next 30链接并再次开始搜索。

有人可以帮助正确的方法记录表中未找到的元素的错误,然后单击下一步按钮,然后再次搜索?

尝试使用下面的代码但是在调用test()

时抛出错误
this.invoiceTable.element(by.cssContainingText('a','Next 30')).click();

2 个答案:

答案 0 :(得分:2)

你可以递归地应用isElementPresent()检查 ,这些内容如下:

function test() {
    this.invoiceTable.isElementPresent(by.cssContainingText('a','1616050')).then(function(isPresent) {
        if (!isPresent) {
            this.invoiceTable.element(by.cssContainingText('a','Next 30')).click();
            test();
        }
    }); 
}

答案 1 :(得分:1)

alecxe推荐的新用法解决了我的问题。

 test() {
                var invoicetable1 = element(by.css('[id$="MainContent_uxInvoiceList"]'));   
**var self = this;**
browser.isElementPresent(by.cssContainingText('a','1626547')).then(function(isPresent) {
            if (isPresent) {
                invoicetable1.element(by.cssContainingText('a','1626547')).click();
            } else {
                invoicetable1.element(by.cssContainingText('a','Next 30 Invoices')).click();
                **self.test();**
            }
    }); 
    }