【问题标题】:Inserting javascript variables and functions into the DOM with selenium使用 selenium 将 javascript 变量和函数插入 DOM
【发布时间】:2018-04-12 19:27:58
【问题描述】:

为了改善我网站上的 selenium 等待,我需要检查特定表格是否已完成绘制。

我正在查看的网站使用 datatables.net,它提供了绘制前和绘制后的事件处理程序。

我的 javascript 代码如下所示...

var isDrawn;
var table = $("#CustomField-443c6726-05c3-48d0-8dfe-c1a26d749cdf").DataTable();

table.on('preDraw', function () {
    console.log('Redraw started at: ' + new Date().getTime());
    isDrawn = false;
});

table.on('draw', function () {
    console.log('Redraw finished at: ' + new Date().getTime());
    isDrawn = true;
});

function returnDrawStatus() {
    console.log(isDrawn);
    return isDrawn;
};

如果我将它粘贴到 chrome 开发工具的控制台窗口中,似乎附加了事件处理程序,我可以访问“isDrawn”变量和“returnDrawStatus()”函数。

当我尝试使用 selenium javascript 执行程序执行相同的操作时,附加了事件处理程序(如果我暂停我的 selenium 脚本并重新排序表,控制台日志消息就证明了这一点),但我无法返回值'IsDrawn' 因为我收到以下错误..

System.InvalidOperationException occurred
  HResult=0x80131509
  Message=unknown error: returnDrawStatus is not defined

这是执行javascript的方法,脚本字符串变量的值为returnDrawStatus();

internal static bool ExecuteJavascriptReturn(IWebDriver driver, string script)
{
    var result = ((IJavaScriptExecutor) driver).ExecuteScript(script);
    return (bool)result;
}

TLDR

  • 如果我在脚本中定义了变量和函数,为什么以后无法通过 selenium javascript 执行程序访问它们? (不刷新页面)
  • 如何等待通过 selenium 触发此特定事件处理程序

谢谢

【问题讨论】:

    标签: javascript c# selenium


    【解决方案1】:

    C# + Selenium WebDriver

    ((IJavaScriptExecutor)driver).ExecuteScript("window.foo = false;");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-28
      • 1970-01-01
      • 2016-01-09
      • 1970-01-01
      • 2013-07-10
      • 2011-11-20
      相关资源
      最近更新 更多