2017-02-02 145 views
2

我正在測試一個頁面,有時會呈現一個小部件,有時會呈現另一個小部件。等待一個承諾或另一個

我試圖使用browser.wait()來確保兩個之一已經呈現,然後繼續與適當的之間進行交互取決於它是。

這裏是我的代碼:

EC = protractor.ExpectedConditions 

browser.wait(() => { 
     return EC.presenceOf(userField) || EC.presenceOf(notMyAccountElement) 
}, WAIT_TIME, 'Lock form (auth0) never appeared.') 

notMyAccountElement.isPresent().then((result) => { 
    if (result) { 
    notMyAccountElement.click() 
    browser.wait(EC.presenceOf(userField), WAIT_TIME, 'New lock form (auth0) never appeared.') 
    } 
    userField.sendKeys(user) 
    passField.sendKeys(password) 
    submitBtn.click() 
}) 

這通常工作,但我在得到間歇性故障:

userField.sendKeys(user) 

我可以偶爾這一行執行瀏覽器時看到它實際上是notMyAccountElement即出現在頁面上。

我認爲最可能的問題是開幕browser.wait()不能解決我期待的方式,但我想明白爲什麼。

回答

4

我想你沒有正確應用預期的條件下,你需要使用EC.or()

browser.wait(EC.or(EC.presenceOf(userField), EC.presenceOf(notMyAccountElement)), 
      WAIT_TIME, 'Lock form (auth0) never appeared.') 

而且,由於你與userField互動,你應該使用的可能visibilityOfelementToBeClickable,而不是presenceOf預期條件。儘管如此,我懷疑這與間歇性失敗有關。

您也可以將等待userField的存在/可見性的等待更改爲notMyAccountElement的隱形/失效。替換:

browser.wait(EC.presenceOf(userField), WAIT_TIME, 'New lock form (auth0) never appeared.'); 

有:

browser.wait(EC.stalenessOf(notMyAccountElement), WAIT_TIME, 'New lock form (auth0) never appeared.'); 

或者,您可以通過一個使用這兩個,一個,使事情更可靠。

+0

Thanks @alecxe!我會試一試'EC.or()',如果它解決了我的問題,請回復。 –

+0

我已經連續使用'EC.or()'運行了兩個小時,沒有發生任何故障。這似乎已經成功了。再次感謝! –