【问题标题】:Extracting Variable from Javascript Source Using Selenium WebDriver使用 Selenium WebDriver 从 Javascript 源代码中提取变量
【发布时间】:2014-11-21 18:16:23
【问题描述】:

我正在使用运行 Javascript 以在页面上打印文本的页面源。这是我所说的来源的 sn-p:

var display_session = get_cookie("LastMRH_Session");
if(null != display_session) {
    document.getElementById("sessionDIV").innerHTML = '<BR>The session reference number: &nbsp;' + display_session + '<BR><BR>';
    document.getElementById("sessionDIV").style.visibility = "visible";
}

display session 变量不为空时,该页面将显示该变量的值,但我想知道是否有办法在我的 Selenium WebDriver 代码中使用此变量。在 Javascript 中使用此代码的函数不返回 display_session 变量,我无法更改页面源。我根据here 的帖子尝试了这个,但它抛出了一个异常。

JavascriptExecutor js = (JavascriptExecutor) driverRp; 
Object result = js.executeScript("return display_session");
System.out.println("sessionId = "+result);

有什么建议吗?

【问题讨论】:

  • 抛出的异常是什么?
  • @Richard org.openqa.selenium.WebDriverException:未知错误:未定义 display_session
  • 看起来display_sessionnull 的情况?还是在js.executeScript 行抛出异常?
  • @Richard 在js.executeScript这一行似乎抛出了异常

标签: java javascript firefox selenium selenium-webdriver


【解决方案1】:

想通了。需要跟踪 cookie 本身而不是弄乱 Javascript 变量。

Cookie cookie = driverRp.manage().getCookieNamed("LastMRH_Session");
String sessionId = cookie.getValue().toUpperCase();
System.out.println("sessionId = "+sessionId);

post找到解决方案。

【讨论】:

    【解决方案2】:

    如果display_session 变量在函数内部,除非它在全局范围内,否则您将无法访问它。

    如果您的意图是读取 cookie 的值,您可以使用 driver.manage().getCookieNamed(...) 作为执行 Javascript 的替代方法。

    编辑:

    刚刚看到你也能弄清楚。我发帖的时候没看到你的回答。很高兴它成功了。

    【讨论】:

    • 别担心,只是勉强击败你。仍然非常感谢您的帮助。
    【解决方案3】:

    试试这个:

    js.executeScript('return get_cookie("LastMRH_Session")')
    

    【讨论】:

    • Eclipse 在该行代码中给我一个错误“无效字符常量”。
    • 虽然这段代码 sn-p 可以解决问题,但including an explanation 确实有助于提高帖子的质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
    猜你喜欢
    • 2012-12-09
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多