【问题标题】:Get value from the AJAX call made in Selenium从 Selenium 中的 AJAX 调用中获取价值
【发布时间】: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


【解决方案1】:

链接必须是网页元素,对吧?所以你可以将它的 href 值与预期的 URL(可能是字符串)进行比较:

String expectedURL = "https://whatever...";
String linkURL = driver.findlement(locator).getAttribute("href");
Assert.assertEquals(expectedURL , linkURL);

【讨论】:

  • 我在获取 expectedURL 时遇到了问题,因为它是动态生成的(由服务器),我需要从服务器获取它以与 href 进行比较。
猜你喜欢
  • 1970-01-01
  • 2014-09-22
  • 2022-12-06
  • 1970-01-01
  • 2021-04-05
  • 1970-01-01
  • 1970-01-01
  • 2022-08-18
  • 1970-01-01
相关资源
最近更新 更多