编码的 UI - C# - ExecuteScript - 计数未正确返回值

我在 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”——这就是我在代码片段中长期转换变量的原因。


DIEA
浏览 151回答 1
1回答

米琪卡哇伊

您当前方法的问题在于您在整个标记源中搜索可能出现在某处的四位数字字符串。我建议改进三点:在innerText 中搜索,而不是在innerHTML 中搜索。这样,作为脚本等不可见标签的一部分的数字被排除在外专门针对包含年份数字的标签。检查标记以找到选择器的适当条件,例如 id 值:document.getElementByID('yearspan').innerText仅搜索整个单词,而不是使用indexOf函数搜索。
打开App,查看更多内容
随时随地看视频慕课网APP