2017-01-24 94 views
9

Senaryo görünmesini bootstarp modal beklemek mümkün değildir. Aşağıda modalın HTML'sidir.Açıölçer bekleyin komut

<div class="modal-content"> 
<div class="modal-body note-error text-center ng-binding"> Sorry, invalid credentials! </div> 
</div> 

Beklenen hata metninin gerçek hata metnine eşit olup olmadığını doğrulamam gerekiyor.

Kodum

PageObject.js

var errorModal = element(by.css('.modal-body.note-error.text-center.ng-binding')); 

this.getErrorText = function(){ 

var until = protractor.ExpectedConditions; 
browser.wait(until.textToBePresentInElement(errorModal, "Sorry, invalid credentials!"), 3000, "Not able to find"); 


    return errorModal.getText(); 

}; 

Spec.js

expect(Login_Page.getErrorText()).toMatch('Sorry, invalid credentials!'); 

Çıktı

Mesaj: Maalesef, geçersiz kimlik bilgileri 'eşleşecek şekilde'' Beklenen !'.

ben bu bekleme neden çalışmadığını bilmiyorum. Herhangi bir yardım çok takdir edilecektir.

+0

Metni doğrudan getText() 'kullanarak ayıklamayı denediniz mi? 'return errorModal.getText()' –

+0

evet bunu zaten yaptı .. –

+0

Bu sorunu genellikle 'dom'de çok sayıda modal pencere var ve bazı tetikleyicilere dayanarak sadece 1 (veya hiçbiri) atıldığında gördüm. Ancak İletki, her zaman baskındaki ilkini alacaktır. Eğer 'html' yapısını tamamıyla yapıştırabilirseniz ... HTML'nizde 'modal-body' ile birden fazla öğeniz olup olmadığını kontrol edebilir misiniz? – AdityaReddy

cevap

1

çalıştığını bana bildirin https://github.com/angular/protractor/issues/4030'un bir parçası olarak pittgoose tarafından. Her webdriver eylem iletki browser.waitForAngular gerçekleştirmeden önce ben sadece burada

Tamam üzerinde paylaşmak için düşünülen() sonraki eylemi gerçekleştirmeden önce çalışan bitirmek için tüm açısal komut bekler hangi. Bu durumda, ileticinin, aramayı gerçekleştirmeden önce açılır pencerenin kaybolmasını beklediğine inanıyorum. Ben browser.wait (...) geçti testinden önce (yanlış) browser.waitForAngularEnabled eklendiğinde çünkü

Ayrıca, ben sadece benim teoriyi kanıtladı.Ör: bu yükü Eğik beklemez çünkü

browser.get('https://app.p3fy.com/#/login'); 
     element(by.css('[name="email"]')).sendKeys('[email protected]'); 
     element(by.css('[name="password"]')).sendKeys('blah'); 
     element(by.css('[type="submit"]')).click(); 
     browser.waitForAngularEnabled(false); // THIS MAKES THE TEST PASS 
     browser.wait(ExpectedConditions.textToBePresentInElement(element(by.id('errorDialog')), 'Sorry, invalid credentials!'), 3000, 'No!'); 

Bu Selenyum Webdriver API ile ilgili bir sorun olmaz.

2

Ben senin [uygulama] bir göz aldıktan sonra sorunun ROOTCAUSE bulduk. Aradığın hata modal her zaman dom içinde bulunur - Bu demektir ki isPresent() her zaman bir doğru döndürür. Ama sadece geçersiz girişinde 1 ya da 2 saniye için görünür - Bu isDisplayed() olanlar sadece birkaç saniye

Bunun yan tesiri getText() dönüş değeri için true dönecektir anlamına gelir. Sadece görünen iç metinleri döndürür. official documentation

aşağıda özü kontrol alt elemanlar, bir ön ya da arka boşluk olmadan da dahil olmak üzere, bu elemanın, görünür innerText al. Görünür öğeler CSS tarafından gizlenmiş değildir. Eğer

getText() gelen boş bir değer görüyoruz nedenle Thats

Ben return browser.executeScript('return arguments[0].textContent',errorModal) ile return errorModal.getText() yerine sen browser.executeScript()

tarafından innerText ayıklamak bir-etrafında çalışmayı önermek ve tüm iyi

olmalıdır

bu Bu cevap katkıda olup

+0

Buna bakmak için zaman ayırdığınız için teşekkür ederiz. Ayrıca, daha önce denediğim ve tarayıcı.executeScript ('return (arguments [0] .textContent) .trim()', errorModal) üzerinde çalıştığı bu geçici çözümden de haberdarım. Asıl sorumum, ExpectedConditions sınıfının textToBePresentInElement() statik yönteminin neden çalışmadığıdır. Selenium webdriver'da da denedim ve işe yaradı. Ben Protractor için yeni ve neden bu hala selenium webdriver api üzerinde bir sarıcı olarak çalışmıyor, bunu çözemiyorum. Ayrıca bunu iletici sorunu https://github.com/angular/protractor/issues/4030 da yayınladım. Lütfen –

+0

öner. Bu mantık basit ve standarttır, yalnızca errorModal metnini, beklenen metni textToBePresentInElement() yöntemini kullanarak hata metnini içerdiğinde getiriyorum. –

+0

Selenium getText() 'i pop-up'lar birkaç saniye görünür olduğunda tetiklenir. Şans eseri .. Kararlı olup olmadığını görmek için birden çok kez çalıştırabilir ... Görünürlüğü 'textToBePresentInElement() '' presenceOf (elementFinder) 've' visibilityOf() ' – AdityaReddy