Кодированный пользовательский интерфейс - C # - ExecuteScript - количество не возвращает значение правильно - PullRequest
0 голосов
/ 07 июня 2018

Я наблюдаю странное поведение при использовании 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, но возвращается неверно, если разница больше 2.

Для теста, который я использовал https://www.google.com - для этого сайта разница между числом должна быть3, чтобы получить правильное значение.Например, если nowYearQA = 2030 и pastYearQA = 2029 или pastYearQA = 2028, то countCurrentYearQA получает 0, а countPastYearQA получает 1 - это неверный результат.

Когда nowYearQA = 2030 и pastYearQA = 2027, то countCurrentYearQA получает 0и countPastYearQA получает 0 - это правильный результат.

Есть что-то, что я здесь пропускаю?Почему эта разница?Из этого сообщения я понимаю, что «API-интерфейс ExecuteScript не поддерживает Int, а поддерживает только long» - вот почему я долго приводил переменные в фрагменте кода.

1 Ответ

0 голосов
/ 07 июня 2018

Проблема с вашим текущим подходом состоит в том, что вы ищете во всем источнике разметки четырехзначные числовые строки, которые, вероятно, где-то встречаются.

Я предлагаю три улучшения:

  1. Поиск по innerText, а не по innerHTML.Таким образом, числа, являющиеся частью невидимых тегов, таких как сценарии, исключаются
  2. . Назначьте теги, которые содержат номера года специально.Проверьте разметку, чтобы найти соответствующие критерии для селектора, например значение идентификатора:

    document.getElementByID('yearspan').innerText

  3. поиск только целых слов, а не indexOf функция.Найдите пример того, как это можно сделать здесь: https://stackoverflow.com/a/2232947/1132334

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...