Javascript 硒';s driver.get()在函数组合下不工作

Javascript 硒';s driver.get()在函数组合下不工作,javascript,selenium,functional-programming,ramda.js,Javascript,Selenium,Functional Programming,Ramda.js,调用driver.get(url)会在我尝试将其与其他函数组合时导致错误。以下是我的小函数方法: const webdriver = require('selenium-webdriver'); const By = webdriver.By; const R = require('ramda'); // Load a webpage const loadPage = url => driver => driver.get(url) // Find

调用
driver.get(url)
会在我尝试将其与其他函数组合时导致错误。以下是我的小函数方法:

const webdriver = require('selenium-webdriver');
const By        = webdriver.By;
const R         = require('ramda');

// Load a webpage
const loadPage = url => driver => driver.get(url)

// Find an WebElement via some locator
const getElement = locator => driver => driver.findElement(method)

// Locator by name
const byName = name => By.name(name)

// Send a series of input keys to a WebElement
const sendKeys = keys => elem => elem.sendKeys(keys)
下面的示例加载Google,并将消息写入搜索栏。这项工作:

// Navigate to the Google webpage
const loadGoogle = loadPage('http://google.com')

// Retrieve the search form element
const getSearchForm = getElement(byName('q'))

const driver = new webdriver.Builder().forBrowser('chrome').build();
loadGoogle(driver); // NOTE: I have to do this seperately -- cannot do it inside the composition

var app = R.compose(sendKeys('search input'), getSearchForm)
app(driver);
但我希望在函数组合中包含
loadGoogle
——这样会更整洁,更“正确”。像这样:

var app = R.compose(sendKeys('search input'), getSearchForm, loadGoogle)
app(driver);
但是我得到了一个
驱动程序。findElement不是一个函数
错误:

/Users/name/Desktop/functional-test.js:9
const getElement = locator => driver => driver.findElement(locator)
                                               ^

    TypeError: driver.findElement is not a function
        at driver (/Users/name/Desktop/functional-test.js:9:48)
        at /Users/name/node_modules/ramda/src/internal/_pipe.js:3:14
        at /Users/name/node_modules/ramda/src/internal/_pipe.js:3:27
        at /Users/name/node_modules/ramda/src/internal/_arity.js:5:45
        at Object.<anonymous> (/Users/name/Desktop/functional-test.js:28:1)
        at Module._compile (module.js:541:32)
        at Object.Module._extensions..js (module.js:550:10)
        at Module.load (module.js:458:32)
        at tryModuleLoad (module.js:417:12)
        at Function.Module._load (module.js:409:3)
/Users/name/Desktop/functional test.js:9
const getElement=locator=>driver=>driver.findElement(定位器)
^
TypeError:driver.findElement不是函数
在驱动程序中(/Users/name/Desktop/functional test.js:9:48)
at/Users/name/node_modules/ramda/src/internal/_pipe.js:3:14
at/Users/name/node_modules/ramda/src/internal/_pipe.js:3:27
at/Users/name/node_modules/ramda/src/internal/_arity.js:5:45
反对。例如,但我不确定,不知道如何修复它。

您需要更改

const loadPage = url => driver => driver.get(url) 


出现错误的原因是
driver.get(url)
返回承诺,而不是WebDriver实例。由于组合中的其他函数接受WebDriver实例作为参数,因此会导致错误

请尝试将
const loadPage=url=>driver=>driver.get(url)
更改为
const loadPage=url=>driver=>{driver.get(url);return driver;}
看看这是否适用于您啊,修复了它!谢谢,这就解决了!发生错误的原因是
driver.get(url)
,而不是
WebDriver
实例。由于组合中的其他函数接受
WebDriver
实例作为参数,因此会导致错误。谢谢@用户3668541,谢谢更新了您所写的解释:-)
const loadPage = url => driver => { driver.get(url) ; return driver; }