我在 Coded UI 中使用 ExecuteScript 觀察到一個奇怪的行為。當兩個數字彼此相鄰時,count 不會返回正確的值。我不確定為什么會這樣。這是代碼片段:static long nowYearQA = 2030;static long pastYearQA = 2029;BrowserWindow window = new BrowserWindow();window.WaitForControlEnabled();long countCurrentYearQA = (long)window.ExecuteScript("count = 0; if(document.body.innerHTML.toString().indexOf('" + nowYearQA.ToString().Trim() + "') > -1){count = 1;} return count;");long countPastYearQA = (long)window.ExecuteScript("count = 0; if(document.body.innerHTML.toString().indexOf('" + pastYearQA.ToString().Trim() + "') > -1){count = 1;} return count;");MessageBox.Show(countCurrentYearQA + " " + countPastYearQA);這是用于頁面驗證,我正在檢查頁面的內部文本中是否存在某些數字。如果數字存在,則返回 1,如果數字不存在,則返回 0。 ExecutionScript 代碼來自以下討論:https : //forums.asp.net/t/1945825.aspx? javascript+check+if +a+string+exists+on+page對于我測試的內部網站,如果數字之間的差異至少為2,則count返回正確的值,但當差異大于2時返回錯誤。對于我使用https://www.google.com的測試- 對于此站點,數字之間的差異需要為 3 才能獲得正確的值。例如,如果 nowYearQA = 2030 和 pastYearQA = 2029,或 pastYearQA = 2028,則 countCurrentYearQA 為 0,countPastYearQA 為 1 - 這是不正確的結果。當 nowYearQA = 2030 和 pastYearQA = 2027 時,countCurrentYearQA 為 0,countPastYearQA 為 0 - 這是正確的結果。有什么我在這里俯瞰的嗎?為什么會有這種差異?我從這篇文章中了解到“ExecuteScript API 不支持 Int,只支持 long”——這就是我在代碼片段中長期轉換變量的原因。
1 回答

米琪卡哇伊
TA貢獻1998條經驗 獲得超6個贊
您當前方法的問題在于您在整個標記源中搜索可能出現在某處的四位數字字符串。
我建議改進三點:
在innerText 中搜索,而不是在innerHTML 中搜索。這樣,作為腳本等不可見標簽的一部分的數字被排除在外
專門針對包含年份數字的標簽。檢查標記以找到選擇器的適當條件,例如 id 值:
document.getElementByID('yearspan').innerText
僅搜索整個單詞,而不是使用
indexOf
函數搜索。
- 1 回答
- 0 關注
- 173 瀏覽
添加回答
舉報
0/150
提交
取消