Java 使用SeleniumWebDriver开发录制和回放工具
我正试图像SeleniumIDE那样使用SeleniumWebDriver开发一个记录和回放工具。我从Chrome浏览器开始,尝试了不同的方法。他们中很少有人在这里: 尝试使用事件侦听器创建JavaScript,并尝试使用JavascriptExecutor执行它。在JS脚本中,我隐式地等待返回一些值。示例代码:Java 使用SeleniumWebDriver开发录制和回放工具,java,javascript,selenium,selenium-webdriver,Java,Javascript,Selenium,Selenium Webdriver,我正试图像SeleniumIDE那样使用SeleniumWebDriver开发一个记录和回放工具。我从Chrome浏览器开始,尝试了不同的方法。他们中很少有人在这里: 尝试使用事件侦听器创建JavaScript,并尝试使用JavascriptExecutor执行它。在JS脚本中,我隐式地等待返回一些值。示例代码: var flag = 0; var elementId; window.addEventListener("click", function (e) {
var flag = 0;
var elementId;
window.addEventListener("click", function (e) {
elementTagName=e.target.id;
alert(elementTagName);
flag++;
});
var timer = setInterval(function () {
myTimer();
}, 1000);
function myTimer() {
if(flag == 0){
document.getElementById("demo").innerHTML=flag;
} else {
clearInterval(timer);
return elementId; //Returning the element ID which was clicked
}
}
但现在的问题是,下面所示的用Java编写的webdriver代码并没有等待返回。当我单独运行时,同样的代码可以正常工作
Object response = ((JavascriptExecutor) driver).executeScript(script);
if (null != response) {
System.out.println((String) response);
}
还有其他方法吗?您可以通过更改此行将其存储在JS变量中,而不是返回JS值:
return elementId;
为此:
retVal = elementId;
然后,每当您访问Java中的响应时,执行JS以访问页面上的JS变量:
// execute JS functions from your question above
((JavascriptExecutor) driver).executeScript(script);
// wait however long needed for those functions to complete
Thread.sleep(1000);
// get result from page
String response = (String)((JavascriptExecutor) driver).executeScript("return retVal");