webdriver-sizzle
Version:
Locate a selenium-webdriver element by sizzle CSS selector
68 lines (61 loc) • 2.19 kB
JavaScript
// Generated by CoffeeScript 1.12.7
var fs, path;
path = require('path');
fs = require('fs');
/*
@param driver - a built driver instance
@param selenium - the selenium module.
very important that these are using the same code/version,
b/c of the library's global control flow.
*/
module.exports = function(driver, selenium) {
var Deferred, WebElement, checkSizzleExists, injectSizzleIfMissing, one;
if (selenium == null) {
selenium = require('selenium-webdriver');
}
if (!((driver.executeScript != null) && (driver.findElement != null) && (driver.findElements != null))) {
throw new Error("Driver passed to webdriver-sizzle must implement executeScript(), findElement() and findElements().");
}
Deferred = selenium.promise.Deferred;
WebElement = selenium.WebElement;
checkSizzleExists = function() {
return driver.executeScript(function() {
return window.Sizzle != null;
});
};
injectSizzleIfMissing = function(sizzleExists) {
var sizzleCode;
if (sizzleExists) {
} else {
sizzleCode = fs.readFileSync(path.join(__dirname, '../lib', 'sizzle.min.js'));
return driver.executeScript("var module = {exports: {}};\n" + sizzleCode + "\nwindow.Sizzle = module.exports;");
}
};
one = function(selector) {
var finder;
finder = function() {
return checkSizzleExists().then(injectSizzleIfMissing).then(function() {
return driver.findElement(selenium.By.js(function(selector) {
return (window.Sizzle(selector) || [])[0];
}, selector));
})["catch"](function(err) {
throw new Error("Selector " + selector + " matches nothing");
});
};
return driver.findElement(finder);
};
one.all = function(selector) {
var finder;
finder = function() {
return checkSizzleExists().then(injectSizzleIfMissing).then(function() {
return driver.findElements(selenium.By.js(function(selector) {
return window.Sizzle(selector) || [];
}, selector));
})["catch"](function(err) {
throw new Error("Selector " + selector + " matches nothing");
});
};
return driver.findElements(finder);
};
return one;
};