Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SeleniumWebDriver开发录制和回放工具_Java_Javascript_Selenium_Selenium Webdriver - Fatal编程技术网

Java 使用SeleniumWebDriver开发录制和回放工具

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) {

我正试图像SeleniumIDE那样使用SeleniumWebDriver开发一个记录和回放工具。我从Chrome浏览器开始,尝试了不同的方法。他们中很少有人在这里:

尝试使用事件侦听器创建JavaScript,并尝试使用JavascriptExecutor执行它。在JS脚本中,我隐式地等待返回一些值。示例代码:

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");