我在HTML中的Javascript代码如下:
function CallMe(a,b){
alert("Hello");
var c = a + b;
return c;
}
我的Selenium-WebDriver的Java代码如下
JavascriptExecutor executor = (JavascriptExecutor)driver;
Object result = null;
try{
result = executor.executeScript("return(CallMe(5,4))");
driver.switchTo().alert().accept();
}catch(NoAlertPresentException ex){
System.out.println("Alert not found");
}
driver.manage().timeouts().setScriptTimeout(30,TimeUnit.SECONDS);
System.out.println(result.toString());
现在,以下java程序的输出将显示为“Hello”,这是警告框的文本,而如果我删除警告框,则结果为“9”,这是我所期望的。
有人可以建议为什么在遇到警告框时没有执行JavaScript的其他语句,而且我在Java代码中也接受了警告框。
另外一个替代解决方案将受到高度赞赏。
答案 0 :(得分:1)
alert()
阻止javascript执行直到警报被解除,所以我假设WebDriver的JavascriptExecutor决定短路并在遇到警报时返回警告框的文本,而不是在你尝试时无限期挂起同步执行整个脚本。这使Java执行继续,并允许驱动程序切换到和关闭警报框。此时javascript将继续,但webdriver不再接收结果。
如果您感到好奇,可以修改您的功能以显示执行暂停,如下所示
function CallMe(a,b){
console.log('before alert at ' +new Date().toString());
alert("Hello");
console.log('after alert at ' +new Date().toString());
var c = a + b;
return c;
}
作为解决方案,您可能希望使用executeAsyncScript()
而不是executeScript()
来避免阻塞问题,等到显示警报,关闭它,然后检索javascript执行的结果。有关说明,请参阅WebDriver executeAsyncScript vs executeScript的答案和等待Alert handling in Selenium WebDriver (selenium 2) with Java的答案。