2016-11-02 11 views
1

我有一個表,我有某些鏈接。由於此表非常動態,我想要搜索鏈接。頁面上的搜索元素,並選擇下一步如果找不到元素

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

如果在當前頁面沒有找到,我想點擊下一個30條記錄按鈕來獲得下30條記錄。

this.invoiceTable.element(by.cssContainingText('a','Next 30')).click(); 

並再次開始搜索下一頁上的上一個鏈接。 我不知道如何實現這一點,我應該記錄什麼錯誤的元素未找到,以便它單擊下一個30鏈接,並再次開始搜索。

有人可以幫助正確的方法來記錄表中找不到的元素的錯誤,然後單擊下一步按鈕,然後再次搜索?

使用下面的代碼嘗試,但它是在調用測試()拋出錯誤

test() { 
       var invoicetable1 = element(by.css('[id$="MainContent_uxInvoiceList"]')); 
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(); 
       test(); 
      } 
    }); 
    } 

回答

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(); 
     } 
    }); 
} 
+0

我無法再以某種方式再次使用測試。這個函數是我作爲一個類創建的pageobject。在課堂內部,我已經定義了我的功能,如我更新後的問題所定義的。我在調用測試函數時遇到錯誤,說明測試不是函數。 – NewWorld

+0

我得到的錯誤: '失敗:測試未定義' 我也嘗試使用this.test(),但然後我得到錯誤'失敗:無法讀取未定義的屬性'測試' – NewWorld

+0

@NewWorld你不能使用'this'在回調函數內部 - 在'test()'函數的頂部創建一個閉包:'var self = this',並在遞歸調用時使用'self.test()'。欲瞭解更多信息,請參閱http://stackoverflow.com/questions/337878/var-self-this。 – alecxe

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();** 
      } 
    }); 
    } 
相關問題