2017-11-17 91 views
1

我想寫一個腳本,需要根據CSS選擇器找到的特定瀏覽器對象是否存在或不存在來調整其工作流行爲。TestCafe - 如何在不失敗測試的情況下檢查Web元素是否存在?

我不想使用document.getElementByID方法,因爲這在技術上不是一個CSS選擇器,而且我們的整個企業都是在CSS選擇器上進行標準化的,所以任何走過DOM然後走過CSS選擇器的東西都不會讓它過去無論如何我們的代碼審查過程。

var thing = await things.thingSelector(thingName); 
if (await t.expect(thing.exists).notOk()) { 
    await t.click(things.OpenThing(thingName)); 
} else { 
    return false; 
} 
return true; 

其中thingSelector是:

const thingSelector = name => 
    Selector('p.thing-header-title span') 
    .withText(name) 
    .parent('div.thing'); 

其中OpenThing是:

const OpenThing = name => 
    thingSelector(name) 
     .find('a.thing-footer-item') 
     .withText('Open'); 

我需要能夠如果對象不存在繼續執行下去,我檢查它存在,或者如果對象在那裏,並且我檢查它不存在,以及對象不存在並且它不存在並且對象不存在的情況,並且我檢查它不存在。

在所有情況下,我仍然需要繼續工作流程。

我已經試過邏輯硬幣的兩面:

if (!await t.expect(thing.exists).ok()) 

而且

if (await t.expect(thing.exists).notOk()) 

如果上述一個不在一個場景中失敗,那麼將在其他的失敗,另一個在第一個沒有失敗的情況下會失敗。我需要一些能夠給我邏輯的東西,但是不會讓腳本執行失敗,並且仍然允許我根據對象是否存在返回True或False。

非常感謝您幫助我解決這個問題,並學習和發展我的Javascript技能!

+0

你是什麼意思「失敗的腳本執行」?如果你得到一個錯誤,所有的細節應該在問題中。另外,由於'await'在被拒絕的承諾後不會返回,這將有助於瞭解如何以及如果't.expect(thing.exists).notOk())'可以被拒絕。 – traktor53

回答

3

您可以檢查if條件異步exists屬性按以下方式:

if(await things.thingSelector(thingName).exists) { 
    // do something 
} 
+2

非常感謝!我現在明白了它應該如何工作。這工作! :-我喜歡學習! –

相關問題