编码的UI - C# - ExecuteScript - count不能正确返回值

时间:2018-06-07 15:07:32

标签: javascript c# coded-ui-tests

我在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);

这是一个页面验证,我在检查某个页面的内部文本中是否存在某个数字。如果出现number,则返回1,如果number不存在,则返回0.执行脚本代码从以下讨论中采用:https://forums.asp.net/t/1945825.aspx?javascript+check+if+a+string+exists+on+page

对于我测试它的内部网站,如果数字之间的差异至少为2,则count会返回正确的值,但当差异大于2时,count会返回错误。

对于我使用https://www.google.com的测试 - 对于此站点,数字之间的差异需要为3才能获得正确的值。例如,如果nowYearQA = 2030且pastYearQA = 2029,或pastYearQA = 2028,则countCurrentYearQA获取0并且countPastYearQA获得1 - 这是不正确的结果。

当nowYearQA = 2030且pastYearQA = 2027时,countCurrentYearQA获得0而countPastYearQA获得0 - 这是正确的结果。

我在这里有什么东西吗?为什么会有这种差异?我从这个post中了解到“ExecuteScript API不支持Int,只支持long” - 这就是我长期在代码片段中转换变量的原因。

1 个答案:

答案 0 :(得分:2)

您当前的方法存在的问题是您在整个标记源中搜索可能在某处出现的四位数字字符串。

我建议进行三项改进:

  1. 在innerText中搜索,而不是在innerHTML中搜索。这样,排除了作为脚本等不可见标签一部分的数字
  2. 专门定位包含年份数字的标签。检查标记以找到选择器的适当条件,例如id值:

    document.getElementByID('yearspan').innerText

  3. 仅搜索整个单词,而不是indexOf函数。在此处查找可以完成此操作的示例:https://stackoverflow.com/a/2232947/1132334