【发布时间】: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