selenium-webdriver将函数数组作为参数传递给executeScript

萨伯特坦
import webdriver from 'selenium-webdriver';

const driver = new webdriver.Builder()
              .withCapabilities(webdriver.Capabilities.chrome())
              .build();

driver.get('https://www.google.com');
let foo = function(rules) {
  rules.forEach(rule => {
    rule();
  });
}
let bar = function() { return 'bar' };
let baz = function() { return 'baz' };
driver.executeScript(foo, [bar, baz]).then(function(result) {
  console.log(result);
});

driver.quit();

它错误了

WebDriverError: unknown error: rule is not a function


let foo = function(rules) {
  return rules;
  // rules.forEach(rule => {
  //   rule();
  // });
}
let bar = function() { return 'bar' };
let baz = function() { return 'baz' };
driver.executeScript(foo, [bar, baz]).then(function(result) {
  console.log(result); // refer the log pasted below
});

看起来该函数正在被序列化 string

[ 'function bar() {\n  return \'bar\';\n}',
  'function baz() {\n  return \'baz\';\n}' ]

关于如何通过的任何指示array of functions as arguments都将有所帮助。

萨伯特坦

我发现了一种不同的解决方法,没有eval 明确使用,但以类似的方式。

  1. 要注入的函数必须命名为function
  2. 注入function.toString()作为的内容<script>

    function foo(rules) {
      var result = [];
      rules.forEach(rule => {
        result.push(rule());
      });
      return result;
    }
    function bar() { return 'bar' };
    function baz() { return 'baz' };
    
    function inject(content) {
      var script = document.createElement('script');
      script.innerHTML = content;
      document.head.appendChild(script);
    }
    let script = `${bar.toString()} ${baz.toString()} ${foo.toString()}`;
    
    driver.executeScript(inject, script);
    
  3. 然后执行所需的功能

    driver.executeScript('return foo([bar, baz])').then(function(result) {
      // use the result
    });
    

完整的例子

// example.js
import webdriver from 'selenium-webdriver';

const driver = new webdriver.Builder()
  .withCapabilities(webdriver.Capabilities.chrome())
  .build();

driver.get('https://www.google.com');

function foo(rules) {
  var result = [];
  rules.forEach(rule => {
    result.push(rule());
  });
  return result;
}
function bar() { return 'bar' };
function baz() { return 'baz' };

function inject(content) {
  var script = document.createElement('script');
  script.innerHTML = content;
  document.head.appendChild(script);
}
let script = `${bar.toString()} ${baz.toString()} ${foo.toString()}`;

driver.executeScript(inject, script);

driver.executeScript('return foo([bar, baz])').then(function(result) {
  console.log(result);
});

driver.quit();

> babel-node example.js

[ 'bar', 'baz' ]

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Selenium IJavaScriptExecutor的ExecuteScript()方法将页面对象作为参数传递时引发异常

来自分类Dev

将变量作为参数传递给selenium find_element函数而不是硬编码的参数会导致InvalidArgumentException

来自分类Dev

如何将变量传递给python(selenium Webdriver)包函数?

来自分类Dev

将数组作为参数传递给函数

来自分类Dev

将require('chromedriver).path直接传递给selenium-webdriver

来自分类Dev

将数组数组作为参数传递给函数

来自分类Dev

从Fortran将数组作为函数参数传递给lua

来自分类Dev

将数组作为参数传递给pick中的函数

来自分类Dev

将数组范围作为参数传递给函数?

来自分类Dev

JavaScript将数组作为单独的参数传递给函数

来自分类Dev

将数组作为单个参数传递给php函数

来自分类Dev

将参数作为数组传递给PowerShell函数

来自分类Dev

将数组从结构作为参数传递给函数

来自分类Dev

将数组作为参数传递给C函数

来自分类Dev

将数组作为参数传递给pick中的函数

来自分类Dev

将指针传递给char数组作为函数的参数-C

来自分类Dev

将php数组作为链接参数传递给ajax函数

来自分类Dev

将numpy数组作为参数传递给theano函数

来自分类Dev

将结构数组作为参数传递给函数

来自分类Dev

将多个数组作为参数传递给函数

来自分类Dev

如何将函数数组作为参数传递给另一个函数,并在以后的函数中调用这些函数

来自分类Dev

Delphi-如何将通用参数传递给接受const参数数组的函数

来自分类Dev

将函数作为参数传递给函数

来自分类Dev

将函数作为参数传递给函数

来自分类Dev

如果不知道数组大小,如何将函数数组作为参数传递

来自分类Dev

如何将参数数组传递给JavaScript中的另一个函数?

来自分类Dev

OpenvVMS从pascal将char参数数组传递给C函数

来自分类Dev

似乎无法将函数传递给node.js(TypeScript)中的setTimeout参数数组

来自分类Dev

不能使用 forEach 和 map 将参数传递给函数数组

Related 相关文章

  1. 1

    Selenium IJavaScriptExecutor的ExecuteScript()方法将页面对象作为参数传递时引发异常

  2. 2

    将变量作为参数传递给selenium find_element函数而不是硬编码的参数会导致InvalidArgumentException

  3. 3

    如何将变量传递给python(selenium Webdriver)包函数?

  4. 4

    将数组作为参数传递给函数

  5. 5

    将require('chromedriver).path直接传递给selenium-webdriver

  6. 6

    将数组数组作为参数传递给函数

  7. 7

    从Fortran将数组作为函数参数传递给lua

  8. 8

    将数组作为参数传递给pick中的函数

  9. 9

    将数组范围作为参数传递给函数?

  10. 10

    JavaScript将数组作为单独的参数传递给函数

  11. 11

    将数组作为单个参数传递给php函数

  12. 12

    将参数作为数组传递给PowerShell函数

  13. 13

    将数组从结构作为参数传递给函数

  14. 14

    将数组作为参数传递给C函数

  15. 15

    将数组作为参数传递给pick中的函数

  16. 16

    将指针传递给char数组作为函数的参数-C

  17. 17

    将php数组作为链接参数传递给ajax函数

  18. 18

    将numpy数组作为参数传递给theano函数

  19. 19

    将结构数组作为参数传递给函数

  20. 20

    将多个数组作为参数传递给函数

  21. 21

    如何将函数数组作为参数传递给另一个函数,并在以后的函数中调用这些函数

  22. 22

    Delphi-如何将通用参数传递给接受const参数数组的函数

  23. 23

    将函数作为参数传递给函数

  24. 24

    将函数作为参数传递给函数

  25. 25

    如果不知道数组大小,如何将函数数组作为参数传递

  26. 26

    如何将参数数组传递给JavaScript中的另一个函数?

  27. 27

    OpenvVMS从pascal将char参数数组传递给C函数

  28. 28

    似乎无法将函数传递给node.js(TypeScript)中的setTimeout参数数组

  29. 29

    不能使用 forEach 和 map 将参数传递给函数数组

热门标签

归档