Создайте функцию блока кода JavaScript в селеновом веб-драйвере с помощью Java. - PullRequest
0 голосов
/ 03 мая 2018

У меня есть этот фрагмент кода JavaScript, который я запускаю в консоли Chrome, чтобы добавить все значения столбца из веб-таблицы:

var iRow = document.getElementById("DataTable").rows.length
var sum = 0
var column = 5
for (i=1; i<iRow; i++){
    var retail = document.getElementById("DataTable").rows[i].cells.item(5).innerText
    var splitRetailPrice = retail.split(" ")
    for(j=0; j<splitRetailPrice.length; j++){
        var trimValue = splitRetailPrice[1]
        var intPrice = Number(trimValue)
        sum += intPrice
        break
    }
}
console.log(sum)

Если я делаю это традиционно в селеновом веб-драйвере с локатором, например: driver.findElement ...., мне потребуется более 5 минут, чтобы выполнить задачу, поскольку веб-таблица воспроизводит более 7 тысяч строк. Я предполагаю, что это сделает это намного быстрее.

Вопрос: Как запустить этот фрагмент кода в селене с использованием Java?

Вопрос: Это была бы хорошая идея?

Я знаю, что это как-то связано с JavascriptExecutor, но я не знаю, как это реализовать.

Я вижу, что все демонстрируют одну строку кода везде с возвратом. Будет полезно, если кто-нибудь покажет мне, как включить несколько строк кода, приведенных выше, и вернуть значение. Предпочтительно в методе, который будет возвращать значение.

ВТОРАЯ ПОПЫТКА:

Я попробовал это сейчас, следуя предложенному как дубликат:

JavascriptExecutor js = (JavascriptExecutor)driver;
String val = (String) js.executeScript(
        "return"+
        "var iRow = document.getElementById('DataTable').rows.length"+
        "var sum = 0"+
        "for (i=1; i<iRow; i++){"+
            "var retail = document.getElementById('DataTable').rows[i].cells.item(5).innerText"+
            "var splitRetailPrice = retail.split("+" "+")"+ //passing a space as a delimiter.
            "for(j=0; j<splitRetailPrice.length; j++){"+
                "var trimValue = splitRetailPrice[1]"+
                "var intPrice = Number(trimValue)"+
                "sum += intPrice"+
                "break"+
            "}"+
        "}");

System.out.println(val);

Я получаю: org.openqa.selenium.JavascriptException: SyntaxError: неожиданный токен: идентификатор

Может кто-нибудь сказать мне, что здесь не так?

1 Ответ

0 голосов
/ 04 мая 2018

Я решил проблему следующим образом. Я поделюсь этим здесь в случае, если это кому-то поможет.

public int sumCost() {

 JavascriptExecutor js = (JavascriptExecutor) driver;
 Long rows = (Long) js.executeScript("return document.getElementById('DataTable').rows.length");
 int retailSum = 0;

 for (int i = 1; i < rows; i++) {
  String retail = (String) js.executeScript(
   "return document.getElementById('DataTable').rows[" + i + "].cells.item(5).innerText"); //6th column
  String[] splitRetailPrice = retail.split(" "); //split the actual value
  int intPrice = Integer.valueOf(splitRetailPrice[1]);
  retailSum += intPrice;
 }
 return retailSum;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...