10

我有兴趣通过 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 中执行“获取窗口大小”或“设置窗口大小”?

4

3 回答 3

27

您可能正在寻找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)
});

...它正确列出了_上定义的所有方法,因此它似乎可以工作。

于 2014-01-14T22:56:07.990 回答
0

你需要 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);
}
于 2019-04-11T11:15:17.493 回答
0

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

于 2016-08-29T23:53:22.197 回答