使用 java 在 selenium Web 驱动程序中创建 JavaScript 代码块的函数



我有一段在chrome控制台上运行的JavaScript代码,用于添加Web表中列的所有值:

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 分钟以上才能完成任务,因为网络表复制了 7000 多行。我假设这将使它更快。

问:如何使用java在Selenium中运行这段代码?

问题:这是个好主意吗?

我知道它与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: 语法错误: 意外令牌: 标识符

有人可以告诉我这里出了什么问题吗?

我已经解决了这样的问题。我将在这里分享它,以防这对某人有所帮助。

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;
}

最新更新