在 Node JavaScript 中使用 Selenium-Webdriver 执行“命令”

executing "commands" using selenium-webdriver in node javascript

本文关键字:执行 命令 Selenium-Webdriver Node JavaScript      更新时间:2023-09-26

我有兴趣通过javascript API执行一些高级"命令"https://code.google.com/p/selenium/source/browse/javascript/webdriver/command.js

如果我从基本代码开始:

var browser = new webdriver
        .Builder()
        .usingServer(server.address())
        .withCapabilities(webdriver.Capabilities.phantomjs())
        .build();

我尝试执行的每种形式的"可能"语法都失败了。 例如:

// does not work
console.log(webdriver.Command('getWindowSize'))
// does not work
console.log(browser.Command('getWindowSize'))

有谁知道如何在Selenium javascript webdriver中执行"获取窗口大小"或"设置窗口大小"?

您可能正在寻找driver.executeScript

例:

var driver = new webdriver.Builder().
   withCapabilities(webdriver.Capabilities.chrome()).
   build();
driver.executeScript('return 2').then(function(return_value) {
    console.log('returned ', return_value)
});

这会将 2 记录到控制台。

我还用以下方法对此进行了测试:

driver.get('http://underscorejs.org/');
driver.executeScript('return _').then(function(return_value) {
    console.log('returned ', return_value)
});

。它正确列出了 _ 上定义的所有方法,因此它似乎有效。

在我的

npm 包中,有一个文件node_modules/selenium-webdriver/test/execute_script_test.js其中包含许多使用 driver.executeScript 的示例(在文件的最后,他们将execute定义为 executeScript 的别名)。

你需要 driver.executeScript()。可以传递函数或字符串。

const _scraper = () => {
  return document.title;
}
const getPageTitle = async (url) => {
  await driver.get(url);
  const pageTitle = await driver.executeScript(_scraper);
  console.log(pageTitle);
}

您还可以将参数传递给函数。

const _scraper1 = (arg) => {
  return document.getElementsByTagName(arg);
}
const getTagData = async (url) => {
  await driver.get(url);
  const metas = await driver.executeScript(_scraper, 'meta');
  console.log(metas);
}