У меня есть этот фрагмент кода 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: неожиданный токен: идентификатор
Может кто-нибудь сказать мне, что здесь не так?