gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 01:59:20 24 4
gpt4 key购买 nike

我在编码 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。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 - 这是正确的结果。

这里有我忽略的东西吗?为什么会有这样的差异呢?我由此明白post “ExecuteScript API 不支持 Int,只支持 long”——这就是我在代码片段中长期强制转换变量的原因。

最佳答案

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

我建议三项改进:

  1. 在innerText 中搜索,而不是在innerHTML 中搜索。通过这种方式,作为不可见标签(如脚本)一部分的数字将被排除
  2. 定位专门包含年份数字的标签。检查标记以找到选择器的适当标准,例如 id 值:

    document.getElementByID('yearspan').innerText

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

关于javascript - 编码 UI - C# - ExecuteScript - 计数未正确返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50744610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com