iMacros中的JavaScript循环问题

时间:2017-05-27 10:11:08

标签: javascript imacros

英语不是我的第一语言,所以请原谅任何错误

FCIM:我在Windows 8 x64上的Firefox 53.0.3(64位)上使用iMacros v9.0.3

我正在尝试使用Datasource循环使用iMacros中的JavaScript代码。

当它只是iim(iMacro)代码时工作正常 它完美地在正确的行号中输入正确的值 但是在我将脚本从iim转换为JavaScript后,它无法正确输入数据。

例如,在我循环的iMacro代码中,它正确地逐行输入数据:

  • loop1 - kannan1

    loop2 - kannan2

    loop3 - kannan3 ...

但是在我将其转换为 JavaScript 之后,它总是一遍又一遍地输入相同的数据

  • loop1 - kannan1

    loop2 - kannan1

    loop3 - kannan1 ...

这是我的数据源 demo.csv

这是一个iim代码示例

VERSION BUILD=9030808 RECORDER=FX
TAB T=1
TAB CLOSEALLOTHERS
SET !DATASOURCE demo.csv
SET !DATASOURCE_COLUMNS 8
SET !DATASOURCE_LINE {{!LOOP}}
SET !LOOP 1
URL GOTO=http://demo.imacros.net/Automate/AutoDataEntry
TAG POS=1 TYPE=INPUT:TEXT FORM=ID:demo ATTR=ID:fname CONTENT={{!COL1}}
TAG POS=1 TYPE=INPUT:TEXT FORM=ID:demo ATTR=ID:lname CONTENT={{!COL2}}
TAG POS=1 TYPE=INPUT:TEXT FORM=ID:demo ATTR=ID:address CONTENT={{!COL3}}
TAG POS=1 TYPE=INPUT:TEXT FORM=ID:demo ATTR=ID:city CONTENT={{!COL4}}
TAG POS=1 TYPE=INPUT:TEXT FORM=ID:demo ATTR=ID:zip CONTENT={{!COL5}}
TAG POS=1 TYPE=SELECT FORM=ID:demo ATTR=ID:state CONTENT=%IN
TAG POS=1 TYPE=SELECT FORM=ID:demo ATTR=ID:country CONTENT=%73
TAG POS=1 TYPE=INPUT:TEXT FORM=ID:demo ATTR=ID:email CONTENT={{!COL8}}
TAG POS=1 TYPE=BUTTON FORM=ID:demo ATTR=TXT:Submit

这是一个Javascript示例代码

var macro; 
macro =  "CODE:";
for(var X = 1; X <= 10; X++){

  macro +=  "TAB T=1" + "\n";
  macro +=  "TAB CLOSEALLOTHERS" + "\n";
  macro +=  "SET !DATASOURCE demo.csv" + "\n";
  macro +=  "SET !DATASOURCE_COLUMNS 8" + "\n";
  macro +=  "SET !DATASOURCE_LINE {{!LOOP}} " + "\n";
  macro +=  "SET !LOOP 1" + "\n"
  macro +=  "URL GOTO=http://demo.imacros.net/Automate/AutoDataEntry" + "\n";
  macro +=  "TAG POS=1 TYPE=INPUT:TEXT FORM=ID:demo ATTR=ID:fname CONTENT={{!COL1}}" + "\n";
  macro +=  "TAG POS=1 TYPE=INPUT:TEXT FORM=ID:demo ATTR=ID:lname CONTENT={{!COL2}}" + "\n";
  macro +=  "TAG POS=1 TYPE=INPUT:TEXT FORM=ID:demo ATTR=ID:address CONTENT={{!COL3}}" + "\n";
  macro +=  "TAG POS=1 TYPE=INPUT:TEXT FORM=ID:demo ATTR=ID:city CONTENT={{!COL4}}" + "\n";
  macro +=  "TAG POS=1 TYPE=INPUT:TEXT FORM=ID:demo ATTR=ID:zip CONTENT={{!COL5}}" + "\n";
  macro +=  "TAG POS=1 TYPE=SELECT FORM=ID:demo ATTR=ID:state CONTENT=%IN" + "\n";
  macro +=  "TAG POS=1 TYPE=SELECT FORM=ID:demo ATTR=ID:country CONTENT=%73" + "\n";
  macro +=  "TAG POS=1 TYPE=INPUT:TEXT FORM=ID:demo ATTR=ID:email CONTENT={{!COL8}}" + "\n";
  macro +=  "TAG POS=1 TYPE=BUTTON FORM=ID:demo ATTR=TXT:Submit" + "\n";
  iimPlay(macro)

}
iimPlay(macro)

有关如何正确循环的任何想法?并提前告诉我所有的兄弟们:)

1 个答案:

答案 0 :(得分:1)

背景

  • 用户PayovYuxug希望运行自动生成的代码,该代码具有由循环生成的自动生成的区域。

问题

  • 自动生成的代码的行为与手动输入而不自动生成的行为不同。

解决方案

  • 比较自动生成的代码,并确定循环生成区域是否包含任何只出现一次的无意重复命令。

简单示例

以下是演示伪代码

中的问题的简单示例

手动编辑的源代码

## Code
connection = new DatabaseConnection;
print connection.currentrow.firstname;
print connection.currentrow.lastname;
print connection.currentrow.age;
connection.getNextRow();

## Result
Alice Anderson 33

生成的源代码

## Code
mycode = "";
for ixx in range(0 .. 3):
   mycode += "connection = new DatabaseConnection;"  //<--MISTAKE
   mycode += "print connection.currentrow.firstname;"
   mycode += "print connection.currentrow.lastname;"
   mycode += "print connection.currentrow.age;"
   mycode += "connection.getNextRow();"
myApp.run(mycode);

生成源代码的结果

## Actual Result
Alice Anderson 33
Alice Anderson 33
Alice Anderson 33
Alice Anderson 33

## Desired Result
Alice Anderson 33
Bob Banderson 44
Charlie Chanderson 55
Danny Danderson 66

## BROKEN ;; Actual Result does not match desired result, because
## the DatabaseConnection gets reset every time.

修正错误

## Fixed code
mycode = "";
mycode += "connection = new DatabaseConnection;"  //<-- FIXED MISTAKE
for ixx in range(0 .. 3):
   mycode += "print connection.currentrow.firstname;"
   mycode += "print connection.currentrow.lastname;"
   mycode += "print connection.currentrow.age;"
   mycode += "connection.getNextRow();"
myApp.run(mycode);

案例特定示例

这里似乎重复了同样的错误。这些行不应该在循环内。

SET !DATASOURCE demo.csv
SET !DATASOURCE_COLUMNS 8

陷阱

  • 对于这个特定问题,不需要使用JavaScript生成代码,因为iim无论如何都已经处理了数据源中的行的迭代。为什么需要生成代码呢?