2016-11-10 50 views
0

這是登錄按鈕。所以如果它存在,它應該登錄。如果不是,應該繼續進行編碼。如果登錄按鈕存在,請登錄 - 量角器

<button class="md-button ng-scope 
    md-ink-ripple layout-align-xs-start-start" 
    type="button" ng-transclude="" data-menu-item="login" ng-click="vm.login()" 
    ng-if="!vm.isAuthenticated()" layout-align-xs="start start" 
    aria-label="person_outline global.menu.account.login"> 
     <md-icon class="ng-scope material-icons">person_outline</md-icon> 
     <label translate="" class="ng-scope">Giriş</label> 
     <div class="md-ripple-container"></div> 
</button> 

我試圖

describe('Product dashboard module', function() { 
     console.log('Product Dashboard Test starting'); 
     var dashboardPageObject = new DashboardPageObject(); 
     beforeEach(function() { 
      var EC = protractor.ExpectedConditions; 
      browser.wait(EC.visibilityOf(element(by.css('ng-click="vm.login()"')).then(function() { 
      console.log('-Loging in'); 
      //here will be login jobs  
     }) 
}) 

Failed: element(...).then is not a function 

我改變這個

var EC = protractor.ExpectedConditions; 
browser.wait(EC.visibilityOf(element.all(by.cssContainingText('ng-click="vm.login()"')) 
.then(function() { 

錯誤是:

Failed: Cannot read property 'bind' of undefined 

我嘗試了很多東西。

回答

1

錯誤Failed: Cannot read property 'bind' of undefined是因爲在您的EC.visibilityOf()方法中,您嘗試通過element.all()這是一個數組。購買歐共體將只接受ElementFinder而不是ElementArrayFinder

所以,如果你想執行某些操作,只有當可用的元素看看下面的例子。

beforEach(function(){ 
    element(by.css('button.layout-align-xs-start-start')).isPresent().then(function(isElementDisplayed){ 
    if(isElementDisplayed){ 
     //perform login operation; 
     } 
    }) 
}) 
+0

失敗:錯誤等待量角器與頁同步:「window.angular未定義這可能是要麼因爲這是一個非角度頁面,或者因爲你的測試涉及客戶端導航,這可能會干擾量角器的引導。詳情請參閱http://git.io/v4gXM「 – mark

+1

你可以在瀏覽器中添加'browser.ignoreSynchronization = true' beforeEach()的開頭,還需要使用'browser.get()'方法導航到相應的url。 –

+0

InvalidElementStateError:無效元素狀態:無法在'Document'上執行'querySelectorAll':'ng-click =「vm.login()」'不是有效的選擇器。也許是因爲沒有登錄按鈕,因爲已經登錄? – mark

1

我無法理解你的如果沒有,應該繼續進行編碼。在你的問題。我曾嘗試下面的代碼,編輯else部分按你的願望

var loginBtn = elemeent(by.buttonText('Login')); 
loginBtn.isDisplayed().then(function (bool) { 
    if (bool) { 
     loginBtn.click(); 
    } else { 
     // your logic goes here 
    } 
}); 
+0

它是beforeeach所以,它應該去它 – mark

+0

如果我沒有錯,你要檢查的登錄按鈕,如果它不存在要執行beforeEach()函數。我不確定這是否可能。但是你可以在你的beforeEach()中使用上面的代碼,並把你想實現的其他邏輯放在else塊(在beforeEach()中) –

1

你有一個錯字,你在你的browser.wait()呼叫失蹤2個右括號...還訪問一個屬性當你的定位不正確,除了class之外,您需要使用方括號。

browser.wait(EC.visibilityOf(element(by.css('[ng-click="vm.login()"]'))))

而且,由於量角器是異步的,你並不需要一個.then()browser.wait()