使用selenium将javascript变量和函数插入到DOM中

时间:2017-10-31 15:06:23

标签: javascript c# 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 dev工具的控制台窗口中,似乎附加了事件处理程序,我可以访问'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触发此特定事件处理程序

谢谢

1 个答案:

答案 0 :(得分:0)

C#+ Selenium WebDriver

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