gpt4 book ai didi

java - WebDriver 的 executeScript 返回警报文本而不是从 JavaScript 方法返回的值

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:04:13 26 4
gpt4 key购买 nike

我在 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 代码中接受该警告框。

也将高度赞赏替代解决方案。

最佳答案

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 的回答所示获取说明。

关于java - WebDriver 的 executeScript 返回警报文本而不是从 JavaScript 方法返回的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24075808/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com