如何在iMacro中定义/现有javascript函数

How to define / existing javascript function in iMacro

本文关键字:现有 javascript 函数 定义 iMacro      更新时间:2023-09-26

我是iMacro的新手,所以如果我使用iMacro时的方法不正确,请纠正我。

我创建了一些javascript函数,这些函数有助于测试DOM上的某些条件。问题是,在测试用例执行期间,我无法将javascript函数(来自External js文件以及在imacro的.js脚本上定义)包含到我的测试文件中,也无法从js lib调用函数。

您是否尝试过使用iimGetLastExtract()

您可以创建一个调用imacros的.js文件。这些宏可以从DOM中提取所需的信息。使用iimGetLastExtract(),您可以提取这些值并在js 中进行测试

当您在FF中时,您实际上可以从imacros菜单中选择一个.js文件来运行。

下面是一个旧的.js文件的例子,我曾经做过这样的事情。im循环遍历动态创建的下拉列表的值,并根据其值执行操作。(如果宏失败,其值将小于0:错误代码)

var i = 1;
var notDone = 1;
while(notDone > 0)  {
    //select the board from available
    iimSet('name', boardname);
    iimPlay('selectBoard.iim');
    //pick the next display view and capture the view name
    iimSet('index',i);
    notDone = iimPlay('assignDisplay.iim');
    var displayName = iimGetLastExtract(1),
        inputName = iimGetLastExtract(2),
        label = '';
    if((displayName == '[None]' && displayName == '[None]')  || !notDone) {
        break;
    }
    label = (displayName === '[None]') ? inputName : displayName;
    if(prefix) label = prefix + label;
    if(suffix) label += suffix;
    iimSet('name', label);
    iimSet('btn',btn);
    iimPlay('assignLabelInput.iim');
    i++;
}

如果你不熟悉里面的一些东西。im使用iimSet()在imacros中设置变量。iimPlay播放该宏。在宏本身中,这里有一个提取信息的例子

TAG POS=1 TYPE=SELECT FORM=NAME:form1 ATTR=ID:dropdownid EXTRACT=TXT

编辑下面是一个愚蠢的例子,希望能展示js和imacros提取功能的使用代码


example.js

var allAnswerVotes=[];
var runningTotal = 0;
var working = true;
var i = 2;
while(working) {
    iimSet('i', i);
    iimPlay('getVotes.iim');
    var extract = iimGetLastExtract(1);
    if(extract === '#EANF#') {
        working = false;
        continue; //hault this iteration;
    }
    var numVotes = parseInt(extract, 10);
    allAnswerVotes.push(numVotes);
    runningTotal += numVotes;
    i++;    //increment i to get the next vote
}
alert('The highest vote is '+ Math.max.apply(null, allAnswerVotes)+', with an average of '+ Math.ceil(runningTotal / allAnswerVotes.length));

getVotes.im

TAG POS={{i}} TYPE=SPAN ATTR=class:*vote-count-post* EXTRACT=TXT

的解释


首先要做的是确保这两个文件(example.js,getVotes.im)位于同一文件夹中,以便example.js正确运行getVotes.iim。接下来,你只需要导航到任何StackOverflow线程,从imacros菜单中选择example.js(f8打开菜单),然后按下播放(或者双击example.js)

宏将找到第i个位置跨度,其中类包含"投票计数帖子",并返回该跨度的文本。i是一个由js传入的参数。我们将从i=2开始,所以第二次投票是跨度(我们跳过问题的投票,只计算答案的投票)。js将继续调用getVotes.im,直到getVotes返回一个提取值"#EANF#",这是当宏找不到指定标签时(即当当前页面上没有投票时)的返回值#EANF#会把我们踢出我们的循环,然后你会得到关于我们统计的选票的一些基本数学信息。

这里的选票提取非常愚蠢,但我只是在演示如何在js 中使用imacros EXTRACT的一个基本示例