在 Selenium IDE 中查找数组中的所有等效键

Finding all equivalent keys in an array in Selenium IDE

我正在使用 Selenium IDE,我正在使用的数据文件对同一个键有多个引用。

我有包含以下类型信息的数组:

Array1: ['green','blue','green','red']

使用此 selenium 代码创建:

<tr>
<td>storeEval</td>
<td>new Array('green','blue','green','red');</td>
<td>Array1</td>
</tr>

我正在使用此 Selenium 代码获取键的索引 'green'(结果如预期的那样为 0):

<tr>
<td>echo</td>
<td>javascript{storedVars['Array1'].indexOf("green")}</td>
<td></td>
</tr>

但是我还需要引用 tomato,我已经尝试引用键 storedVars['Array1'].indexOf("green")] 的第二个实例(结果为 'null',预期为 2):

<tr>
<td>echo</td>
<td>javascript{storedVars['Array1'].indexOf("green")[1]}</td>
<td></td>
</tr>

我也试过了(结果为 0,预期为 2):

<tr>
<td>echo</td>
<td>javascript{storedVars['Array1'].indexOf("green",1)}</td>
<td></td>
</tr>

似乎 Selenium 或 javascript 忽略了 indexOf 的起始变量,我知道这是 Javascript 1.6 支持的,我使用的是最新的 Firefox(版本 50)

如有任何指点或建议,我将不胜感激。

所以这不是您要问的,但确实有效:

<tr>
    <td>echo</td>
    <td>javascript{storedVars['Array1'].lastIndexOf('green')}</td>
    <td></td>
</tr>

但是,像你一样,我无法让 fromIndex 受到尊重。我去了这里:http://jsfiddle.net/Ac6CT/ 检测我的 JS 版本似乎只有 1.5 (FF 50.1.0)

我的解决方案是在用户扩展中创建两个函数,创建数组然后检索数组(这有利于将循环从 Selenium(慢)移动到 javascript 函数(快) 。这提供了在数组中获取多个引用的完整 objective。

 Selenium.prototype.doGetCommonDisabilityArray = function(key,record){
 var result = storedVars.obj2[key];
 if (result == null) {
 storedVars[record]=[];
 return;
 }
 storedVars[record]=result;
 }

上面的内容满足了没有找到键的情况,并创建了数组。在 Selenium IDE 中这样使用:

<tr>
<td>addToDisabilityArray</td>
<td>${NAT090ClientIdentifier}</td>
<td>${NAT090DisabilityTypeIdentifier}</td>
</tr>

    Selenium.prototype.doAddToDisabilityArray = function(key,record) {

    var children;
    if (key in storedVars.obj2) {
        children = storedVars.obj2[key];
    } else {
        children = [];
    }
    children.push(record);
    storedVars.obj2[key] = children;
    }

其中:

doAddToDisablityArray 是 Selenium 中调用的函数 IDE

key是我在数组中寻找的值

obj2是key引用的临时数组

以这种格式在 Selenium IDE 中使用:

<tr>
<td>getCommonDisabilityArray</td>
<td>${NAT120ClientIdentifier}</td>
<td>CommonDisabilityListArray</td>
</tr>

请注意,确保 user-extension.js 在 Selenium IDE 中被引用为 'Selenium Core Extensions' 非常重要,否则我们无法访问函数之间的变量。