是否仍然可以使用 Selenium IDE 访问 javascript 变量?

Is it still possible to access javascript variables with Selenium IDE?

我正在使用 chrome 的 selenium IDE 扩展进行测试,我遇到的问题与这个问题基本相同 Access JavaScript variables with Selenium IDE

使用 this.browserbot.getUserWindow() 根本无法获取我定义的变量,因为我提到的问题已有 8 年历史,我想知道是否没有遗漏一些更新。

我也查看了最近的文档https://www.selenium.dev/selenium-ide/docs/en/api/commands,但我找不到他们在问题中提到的 assertEval 命令。

我想知道 运行 脚本命令是否用于该目的。

总结一下:

我会尝试在这方面提供帮助,因为我在 IDE 中使用过数组。数组创建是在 JS 中完成的,但是它在 JS 和 Selenium 中的存储方式不同,然后在其上进行操作。要回答第 2 点,执行脚本是我一直调用的 JS,然后在 IDE 框架中完成它,例如可以将其存储在 Selenium 中。 运行 脚本仅在 JS 中执行,不会 return 带有 IDE 的日志。回答第 1 点和整个问题:

方法一

要创建 Selenium IDE 数组,请使用 JS 执行脚本命令,这将启用仅存储为 Selenium IDE 变量,这是其基本版本:

Command:   execute script
Target:    return ["hello","world"]
Value:     myArray

要检查这一点,添加第二个命令来检查 Selenium 变量是否正确存储并在 IDE 日志中显示正确的结果:

Command:   echo
Target:    ${myArray}

方法二

如果你已经在 J​​S 中定义了一个数组,例如让 myJSArray = ["hello", "world"] 或 window.myJSArray = ["hello", "world"] 并且它定义在 Selenium 已经打开的 window 中,然后你可以存储它在硒中使用:

Command:   execute script
Target:    return myJSArray | Target:    return window.myJSArray
Value:     myArray

然后使用上面相同的 echo 命令仔细检查它是否有效

方法三

如果你还没有打开 window 并且你想在 JS 和 Selenium 中存储变量,那么

Command:   execute script
Target:    return myJSArray = ["hello","world"] | Target:    return window.myJSArray = ["hello","world"]
Value:     myArray

然后再次使用 echo 命令检查它是否有效。

总结 - 方法1只将数组存储在Selenium中(使用JS实现),方法2将一个已经存储的JS变量存储在window打开的Selenium中,方法3将变量存储在 JS window 和 Selenium.

根据使用的方法,您可以对变量(JS 或 Selenium)进行断言,甚至可以在 If/Else、循环或一般 JS 函数中使用它们。如果您将 Selenium 变量用于 if/else 等的任何 JS 脚本,则需要向其添加 ${},如果使用 JS 变量则可以在没有美元的情况下调用它。对 Selenium myArray 变量或 JS myJSArray 变量使用方法 3 的断言示例:

Command:   execute script
Target:    return myJSArray = ["hello","world"]
Value:     myArray

//Now have 2 variables, 1. myJSArray that the browser can use; and 2. myArray that Selenium can use. Below to assert either variable contains the array item "world":

Command:   execute script
Target:    return ${myArray}.includes("world")
Value:     myArrayIncludesWorld

Command:   assert
Target:    myArrayIncludesWorld
Value:     true


Command:   execute script
Target:    return myJSArray.includes("world")
Value:     myJSArrayIncludesWorld

Command:   assert
Target:    myJSArrayIncludesWorld
Value:     true