Enable exclude parts made safaridriver return error
I run following mocha test and result error. That only happens in safari.
var testName = "search-fail",
eleName = "body";
browser
.url('http://webdriver.io/')
.pause(4000)
.webdrivercss( 'safari-error', [
{
name: eleName,
elem: 'section.content',
exclude: '.teaser'
},
], function(err, res) {
assert.ifError(err);
var resultObj = res[eleName];
for(var i=0,len=resultObj.length; i<len; i++){
assert.ok(resultObj[i].isWithinMisMatchTolerance, resultObj[i].message);
}
done();
});
============== Error below ====================== Uncaught RuntimeError (UnknownError:13) An unknown server-side error occurred while processing the command. Problem: undefined is not a function (evaluating 'elements.forEach') (WARNING: The server did not provide any stacktrace information) Command duration or timeout: 5 milliseconds Build info: version: '2.45.0', revision: '5017cb8', time: '2015-02-26 23:59:50' System info: host: 'm-mac.local', ip: 'xxx.xxx.xxx.xxx', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.10.4', java.version: '1.7.0_80-ea' Session ID: null Driver info: org.openqa.selenium.safari.SafariDriver Capabilities [{platform=MAC, cssSelectorsEnabled=true, javascriptEnabled=true, secureSsl=true, browserName=safari, takesScreenshot=true, version=8.0.7}]
Callstack:
-> execute("return (function (fn, sArr, args) { var cb = arguments[arguments.length - 1], i = 0, sArgs = [], use, value, xp, cs, tn, res, j, arg; while ((use = sArr[i++]) && (value = sArr[i++])) { arg = []; xp = cs = tn = [Function]; switch (use) { case \"partial link text\": xp = '//a[contains(text(),\"'+value+'\")]'; break; case \"link text\": xp = '//a[text()=\"'+value+'\"]'; break; case \"xpath\": xp = value; break; case \"id\": cs = '[id=\"'+value+'\"]'; break; case \"name\": cs = '[name=\"'+value+'\"]'; break; case \"tag name\": tn = value; break; case \"css selector\": cs = value; break; default: throw new Error(\"Could not evaluate selector: Invalid strategy \" + use); } if (xp) { res = document.evaluate(xp, document, null, 0, null); while (value = res.iterateNext()) { arg.push(value); } } else if (tn || cs) { res = tn ? document.getElementsByTagName(tn) : document.querySelectorAll(cs); j = 0; while (value = res[j++]) { arg.push(value); } } sArgs.push(arg); } var parameter = args && sArgs.concat(args) || sArgs; if(parameter.length === 0 || (parameter.length === 1 && parameter[0].length === 0)) { if(typeof cb === 'function') { return cb('NoSuchElement') && new Error('NoSuchElement'); } return new Error('NoSuchElement'); } parameter.push(arguments[arguments.length - 1]); return fn.apply(window, parameter);\n})(function () { /** * excludeElements are elements queried by specific selenium strategy */ var excludeElements = Array.prototype.slice.call(arguments), excludeRect = []; excludeElements.forEach(function(elements) { if(!elements) { return; } elements.forEach(function(elem) { var elemRect = elem.getBoundingClientRect(); excludeRect.push({ x0: elemRect.left, y0: elemRect.top, x1: elemRect.left + elemRect.width, y1: elemRect.top + elemRect.height }); }); }); return excludeRect; },[\"css selector\",\".teaser\"],[], arguments[arguments.length - 1]);")
-> selectorExecute([],[Function])
-> webdrivercss("safari-error",[{"name":"body","elem":"section.content","exclude":".teaser"}])