我試圖編寫一個測試用例來驗證頁面上的上下文。
有幾個迭代,內(nèi)容為一個單一的網(wǎng)頁可以合并的解決方案從:如何使用scriptAll找到所有的& ltdiv & gt在空手道中帶有id或風(fēng)格屬性
這個場景還有一個問題——內(nèi)容被分割成了多個頁面。除非按回車鍵,否則沒有按鈕可以轉(zhuǎn)到下一頁。
此外,確定它是否已到達上下文末尾的唯一方法來自以下部分:
<div id="msgList" class="test">
<table>
<tbody>
<tr class="infoText">
<td class="Type">reminder</td>
<td class="Text">99 more data to view</td>
<td class="messageNumber">#12345</td>
</tr>
</tbody>
</table>
<div id="message" style="display:none;">reminder more data to view</div>
</div>
在進入最后一頁之前,它會發(fā)生如下變化:
<div id="msgList" class="test">
<table>
<tbody>
<tr>
<td class="Type">23456</td>
<td class="Text">enter your input</td>
</tr>
</tbody>
</table>
<div id="message" style="display:none;">23456 enter your input</div>
</div>
已編輯:或('。“消息編號”仍在顯示,但值不同)
<div id="msgList" class="test">
<table>
<tbody>
<tr>
<td class="Type">reminder</td>
<td class="Text">66 no more data to view</td>
<td class="messageNumber">#98765</td>
</tr>
</tbody>
</table>
<div id="message" style="display:none;">random text</div>
</div>
我想知道是否有一種方法可以使用條件邏輯遍歷所有頁面,并將內(nèi)容(解決方案從每個頁面提取上下文)合并在一起進行斷言?
每頁的格式完全相同。
編輯:最終使其與js函數(shù)一起工作
* def allData = []
* def loopContent =
"""
function() {
while (allData) {
let list = locateAll('form div', x => { let id = x.attribute('id'); return id ? id.startsWith('line1_R') : false });
let data = list.map(x => x.text.trim());
let msgText = script('.Text','_.textContent').trim();
if (msgText != "reminder more data to view"){
allData.push(data);
return allData;
}
else if(msgText == "reminder more data to view){
allData.push(data);
input('body', Key.ENTER);
}
else{
karate.fail("Content not being looped properly");
}
}
}
"""
* def letterContent = loopContent()
* print letterContent
多謝
是的,它可能需要一些實驗,但請閱讀waitUntil()與函數(shù)的描述。
也許另一個答案會給你一些提示:https://stackoverflow.com/a/76268570/143475
編輯:根據(jù)更新的問題,你可以這樣做& quot收藏& quot循環(huán)中的所有數(shù)據(jù):
* def allData = []
* def loopContent =
"""
function() {
if (!exists('.messageNumber')) {
let list = locateAll('form div', x => { let id = x.attribute('id'); return id ? id.startsWith('line1_R') : false });
let data = list.map(x => x.text.trim());
allData.push(data);
return true;
}
input('body', Key.ENTER);
}
"""
* waitUntil(loopContent)
* print allData
這可能會復(fù)制前幾頁,但是我認為可以改進這個例程,只推送()新加載的行。這可能很棘手。
請注意,有一個幫助器函數(shù)可以對陣列進行重復(fù)數(shù)據(jù)消除:
* def cleaned = karate.distinct(allData)