【发布时间】:2018-05-07 23:57:46
【问题描述】:
我正在进行一项测试,它将检查页面上是否存在链接以及它是否引用了正确的页面(动态生成的链接)。为了测试链接,我想在 Selenium 中进行 AJAX 调用,从服务器获取正确的 URL 并进行比较。我的挑战是从 Selenium 中的 AJAX 调用中获取价值。
JavascriptExecutor jse = (JavascriptExecutor)driver;
String jsCode =
"var str = $.get('/User/GetDynamicURL/', function (result) {"
+ "console.log('result: ' + result); "
+ "return result;"
+ "})"
+ "return str;";
String dynamicURL = (String) jse.executeScript(jsCode);
虽然我在控制台中看到了预期的输出,但我的代码不起作用。 我得到异常:
java.lang.ClassCastException: com.google.common.collect.Maps$TransformedEntriesMap cannot be cast to java.lang.String
当我执行代码时:
var str = $.get('/User/GetDynamicURL/', function (result) {
console.log('result: ' + result);
return result;
});
str;
对于str 在浏览器的控制台中,我得到一个看起来像这样的对象:
{readyState: 1, getResponseHeader: ƒ, getAllResponseHeaders: ƒ, setRequestHeader: ƒ, overrideMimeType: ƒ, …}
而str.responseJSON 返回所需的网址
请告诉我如何修复我的代码。 谢谢!
【问题讨论】:
-
我不熟悉您正在使用的库,但显然
String dynamicURL = (String) jse.executeScript(jsCode);是问题所在。写入com.google.common.collect.Maps$TransformedEntriesMap dynamicURLMap = (String) jse.executeScript(jsCode);,然后检查dynamicURLMap,它包含哪些值。其中一个值就是您要寻找的值。 -
@JayC667,我尝试了受 lukeis recomendation
Map<String,Object> result = (Map<String,Object>) jse.executeScript(jsCode);启发的下一个代码结果不包含预期值 -
也尝试过他的最后回应?
标签: javascript java selenium