Selenium 的 driver.get() 在函数组合下不起作用
Selenium's driver.get() does not work under function composition
调用 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
-- 它会更整洁,更多 'correct'。像这样:
var app = R.compose(sendKeys('search input'), getSearchForm, loadGoogle)
app(driver);
但是我收到 driver.findElement is not a function
错误:
/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)
我认为这是因为 loadPage
没有返回 WebDriver 实例,但我不确定,也不知道如何修复它。
你需要改变
const loadPage = url => driver => driver.get(url)
到
const loadPage = url => driver => { driver.get(url) ; return driver; }
错误的发生是因为 driver.get(url)
returns 一个承诺,而不是一个 WebDriver 实例。由于组合中的其他函数接受 WebDriver 实例作为参数,因此导致错误
调用 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
-- 它会更整洁,更多 'correct'。像这样:
var app = R.compose(sendKeys('search input'), getSearchForm, loadGoogle)
app(driver);
但是我收到 driver.findElement is not a function
错误:
/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)
我认为这是因为 loadPage
没有返回 WebDriver 实例,但我不确定,也不知道如何修复它。
你需要改变
const loadPage = url => driver => driver.get(url)
到
const loadPage = url => driver => { driver.get(url) ; return driver; }
错误的发生是因为 driver.get(url)
returns 一个承诺,而不是一个 WebDriver 实例。由于组合中的其他函数接受 WebDriver 实例作为参数,因此导致错误