selenium - 使用 Selenium 在 JavaScript 变量发生变化时获取它们
问题描述
我知道我可以使用 Selenium Java API 获取 JavaScript 变量的值,如下所示
JavascriptExecutor je = (JavascriptExecutor) driver;
Long JSvar = (Long)je.executeScript("return variable");
但是 Selenium 中有没有办法在 JS 代码中更改该变量时获取该变量的每个值。例如,如果我的 JS 代码如下所示
var variable=1;
/* some code */
variable=2;
/* some code */
variable=3;
有没有办法抓住这三个值(1,2,3)?类似于在 JS 代码上设置断点,但以自动化方式。我在想我可以将这些值存储在一个数组中,然后获取该数组,但是 Selenium 中是否有另一种方法可以通过对 JS 代码的最小更改来处理这个问题?
解决方案
您尚未指定 Selenium 应如何或何时检索这些值,但这里有一些 JavaScript 代码至少可以使这些值可用:
(function(window) {
var values = [];
var someVariable;
Object.defineProperty(window, 'someVariable', {
get: function() {
return someVariable;
},
set: function(value) {
someVariable = value;
values.push(value);
}
});
Object.defineProperty(window, 'someVariableValues', {
get: function() {
return values;
}
});
})(this);
无论 JavaScript 代码是执行window.someVariable = X
还是简单地执行someVariable = X
,setter 都会将该值推送到数组中。Selenium(或 JavaScript)可以访问window.someVariableValues
以返回该变量的历史值和当前值。
使用 Selenium 检索它可能是:
JavascriptExecutor je = (JavascriptExecutor) driver;
// Get current value of variable
Long JSvar = (Long)je.executeScript("return someVariable");
// Get all values assigned to variable (this part I'm not 100% sure about)
Long[] historicalValues = (Long[])je.executeScript("return someVariableValues");
推荐阅读
- python - 如何在python中使用xpath在h1标签内获取末尾有空格的文本时消除“\ t”?
- python - 自动生成的小部件上的 PyQt 信号
- javascript - 从数据库中删除图像
- model - Sequelize 添加到联结表实例的特殊方法/mixin
- php - Web Push Php 库示例 - 跨域时的严格来源
- r - 转换为数据框时的 xml2 命名空间/xpath 问题
- apache - .htaccess RewriteRule 不适用于 Apache2
- java - 模拟增强的 DynamoDbTable CRUD 操作
- linux - Bash:读取 CSV 文件并根据条件对列进行排序
- pandas - 获取列表列表而不是单个列表的结果