簡體   English   中英

在節點javascript中使用selenium-webdriver執行“命令”

[英]executing “commands” using selenium-webdriver in node javascript

我有興趣通過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示例(在它們定義的文件的最末端,作為executeScript的別名execute )。

你需要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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM