Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
2ee9bfd
Rename the current Edge to EdgeLagacy in config and docs. Add new con…
danjtag789 Feb 11, 2020
ab36020
implement get Edge (Chromium) WebDriver automatically from url
danjtag789 Feb 11, 2020
23b7ae3
minor change
danieljtag Feb 12, 2020
00b7c45
Merge branch 'master' of https://github.com/SAP/ui5-uiveri5
danjtag789 Feb 13, 2020
8e19be9
version suffix string is added to the edge web driver
danjtag789 Feb 14, 2020
6269f57
keep original driver executable name as prefix - msedgedriver
danjtag789 Feb 14, 2020
389dc58
add edge.latest version
danieljtag Feb 16, 2020
d148700
update edge.latest version
danieljtag Feb 16, 2020
30aa873
merge
danjtag789 Feb 17, 2020
41a6c96
add edge chromium version
danieljtag Feb 22, 2020
7a1ad32
get edge chromium latest complete version from driverVersions.json
danieljtag Feb 23, 2020
2910c01
cleanup
danieljtag Feb 23, 2020
a1640fc
fix for firefox
danieljtag Feb 23, 2020
696d6a8
clear separation of the three styles to get latest versions
danieljtag Feb 23, 2020
dd18bbf
log message update
danieljtag Feb 23, 2020
cf75f1b
change if statement default on getLatestVersion (dependencies for int…
danjtag789 Feb 24, 2020
ca2269e
Merge remote-tracking branch 'upstream/master'
danieljtag Feb 28, 2020
e9c3e4b
Merge remote-tracking branch 'upstream/master'
danieljtag Mar 16, 2020
a0d51bc
fix typo; remove excessive log
danieljtag Mar 17, 2020
b50131e
fix typo
danieljtag Mar 17, 2020
a813f01
fix typo
danieljtag Mar 17, 2020
6c7812b
removed unnecessary if (as per code review)
danjtag789 Mar 19, 2020
bca118b
Merge branch 'master' of https://github.com/SAP/ui5-uiveri5
danjtag789 Mar 19, 2020
abb3441
update chrome ver to resolve conflict
danieljtag Apr 13, 2020
6181e6d
resolve conflict
danieljtag Apr 13, 2020
90b8ad0
resolve conflict
danieljtag Apr 13, 2020
c663275
resolve conflict
danieljtag Apr 13, 2020
f2c76ba
Merge remote-tracking branch 'upstream/master'
danieljtag Apr 13, 2020
2cb63ee
resolve conflict
danieljtag Apr 13, 2020
dbd4088
Merge branch 'master' into master
danieljtag Aug 14, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ and brings most (and more) of its benefits to UI5 applications.
* Use generated snippets from [Test Recorder](https://blogs.sap.com/2020/01/23/test-recording-with-ui5-test-recorder/) that is build-in every UI5 app (from UI5 1.74)
* Open-source, fork and modify to fit your specific neeeds.


## Requirements
* [NodeJS](https://nodejs.org/en/download/), version 8.0 or higher

Expand Down
20 changes: 17 additions & 3 deletions conf/profile.conf.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,20 @@ exports.config = {
'IEDriverServer_Win32_${connectionConfigs.direct.binaries.iedriver.version}.' + '${connectionConfigs.direct.binaries.iedriver.patch}.zip',
executable: 'IEDriverServer.exe'
},
// edge based on chromium; Note: If on a Windows 64bit system the variable osTypeString returns win32 string (see uiveri5.js), then maintain the url below with e.g. edgedriver_win64.zip
edgedriver: {
version: '{edge.latest}',
unzip: true,
filename: '${osTypeString == "win32" || osTypeString == "win64" ? "msedgedriver.exe" : "msedgedriver"}',
baseurl: 'https://msedgedriver.azureedge.net',
url: '${connectionConfigs.direct.binaries.edgedriver.baseurl}/${connectionConfigs.direct.binaries.edgedriver.version}'+'/edgedriver_${osTypeString}.zip',
latestCompleteVersionFileUrl: 'https://raw.githubusercontent.com/SAP/ui5-uiveri5/master/driverVersions.json',
executable: {
win32: 'msedgedriver-${connectionConfigs.direct.binaries.edgedriver.version}.exe',
win64: 'msedgedriver-${connectionConfigs.direct.binaries.edgedriver.version}.exe',
mac64: 'msedgedriver-${connectionConfigs.direct.binaries.edgedriver.version}'
}
},
geckodriver: {
version: '{latest}',
unzip: '${osTypeString == "win32" || osTypeString == "win64"}',
Expand Down Expand Up @@ -83,7 +97,7 @@ exports.config = {
}
},
/* maximize browser on all desktops to ensure consistent browser size */
'firefox,ie,edge,safari,chrome,chromium': {
'firefox,ie,edge,edgelegacy,safari,chrome,chromium': {
'windows,mac,linux': {
'*': {
remoteWebDriverOptions: {
Expand Down Expand Up @@ -201,10 +215,10 @@ exports.config = {
},
*/
/*
'edge': {
'edgelegacy': {
'*': {
'*': {
edgedriverOptions: {
edgelegacydriverOptions: {
'setPageLoadStrategy': ['normal'],
}
}
Expand Down
2 changes: 1 addition & 1 deletion docs/config/config.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ Browser runtime is an object that specifies the browser and platform on which to
You can specify only a few of the properties of a runtime. The rest are derived if possible or wildcards are assumed.

Values and defaults:
* browserName - one of (chrome|firefox|ie|safari|edge), browser name, default: chrome
* browserName - one of (chrome|firefox|ie|safari|edge|edgelegacy), browser name, default: chrome
* browserVersion - browser version, default: *
* platformName - one of (windows|mac|linux|android|ios|winphone)} - platform name, default: windows
* platformVersion - platform number like 7,8 for windows; 4.4,5.0 for android;, default: *
Expand Down
17 changes: 15 additions & 2 deletions docs/config/drivers.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,19 @@ browsers: [{
}]
```

## Microsoft Edge (based on Chromium)
Microsoft Edge Driver is downloadable separately from Windows. Please make sure you have the correct version installed as explained in [Microsoft Edge](https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/). The WebDriver release version should match browser version, for example, for Microsoft Edge (based on Chromium) Release 79, choose WebDriver Release 79. The downloaded driver should be moved to <uiveri5-installation-folder>/selenium/ without renaming.
```javascript
browsers: [{
browserName: 'edge',
capabilities: {
remoteWebDriverOptions: {
maximized: true
}
}
}]
```

## Firefox
Firefox uses the geckodriver that is updated regularly, so by default, we use the latest version.

Expand Down Expand Up @@ -181,8 +194,8 @@ browsers: [{
}]
```

## Edge
Microsoft Edge requires a WebDriver that is distributed as a native installation. Please make sure you have the correct version installed as explained in [Microsoft Edge WebDriver](https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/). The release version should match the first part of your OS build, for example, for OS build number 15063.0000, choose driver Release 15063. The downloaded driver should be moved to <uiveri5-installation-folder>/selenium/ without renaming.
## Edge Legacy
Microsoft Edge Legacy requires a WebDriver that is distributed as a native installation. Please make sure you have the correct version installed as explained in [Microsoft Edge Legacy](https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/). The release version should match the first part of your OS build, for example, for OS build number 15063.0000, choose driver Release 15063. The downloaded driver should be moved to <uiveri5-installation-folder>/selenium/ without renaming.

## Safari
Safari10 includes native webdriver that is bundled with the Safari browser. Please make sure you have enabled it as explained in [Testing with WebDriver in Safari](https://developer.apple.com/documentation/webkit/testing_with_webdriver_in_safari).
Expand Down
3 changes: 3 additions & 0 deletions driverVersions.json
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
{
"chrome": {
"latest": 84
},
"edge": {
"latest": "84.0.522.59"
}
}
34 changes: 32 additions & 2 deletions src/connection/directConnectionProvider.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ var BINARIES = {
SELENIUM: 'selenium',
CHROMEDRIVER: 'chromedriver',
IEDRIVER: 'iedriver',
GECKODRIVER: 'geckodriver'
GECKODRIVER: 'geckodriver',
EDGEDRIVER: 'edgedriver'
};

/**
Expand Down Expand Up @@ -85,6 +86,8 @@ DirectConnectionProvider.prototype.resolveCapabilitiesFromRuntime = function(run
capabilities.browserName = 'internet explorer';
} else if (runtime.browserName === 'edge') {
capabilities.browserName = 'MicrosoftEdge';
} else if (runtime.browserName === 'edgelegacy') {
capabilities.browserName = 'MicrosoftEdgeLegacy';
} else {
capabilities.browserName = runtime.browserName;
}
Expand Down Expand Up @@ -190,10 +193,16 @@ DirectConnectionProvider.prototype.setupEnv = function() {
})
);
} else if (browserName == 'edge') {
promises.push(that._getBinaryFileName(BINARIES.EDGEDRIVER).then(
function(filename){
that.seleniumConfig.executables.edgedriver = filename;
})
);
} else if (browserName == 'edgelegacy') {
promises.push((function() {
var deferred = q.defer();
var filename = path.join(that._getSeleniumRoot(), 'MicrosoftWebDriver.exe');
that.seleniumConfig.executables.edgedriver = filename;
that.seleniumConfig.executables.edgelegacydriver = filename;
deferred.resolve(filename);
return deferred.promise;
})());
Expand Down Expand Up @@ -471,6 +480,8 @@ DirectDriverProvider.prototype.getNewDriver = function() {
opts.jvmArgs.push('-Dwebdriver.ie.driver=' + that.seleniumConfig.executables.iedriver);
} else if (browserName == 'MicrosoftEdge') {
opts.jvmArgs.push('-Dwebdriver.edge.driver=' + that.seleniumConfig.executables.edgedriver);
} else if (browserName == 'MicrosoftEdgeLegacy') {
opts.jvmArgs.push('-Dwebdriver.edgelegacy.driver=' + that.seleniumConfig.executables.edgelegacydriver);
}

var seleniumServer = new that.deps.remote.SeleniumServer(that.seleniumConfig.executables.selenium,opts);
Expand Down Expand Up @@ -568,6 +579,7 @@ DirectDriverProvider.prototype.getNewDriver = function() {
var allIECapabilities = driverOptions.toCapabilities(browserOptions.toCapabilities());
// start the local iedriver and connect to it
driver = that.deps.ie.Driver.createSession(that.deps.ie.Options.fromCapabilities(allIECapabilities));

} else if (browserName == 'MicrosoftEdge') {
that.deps.edge = protractorModule.require('selenium-webdriver/edge');

Expand All @@ -586,6 +598,24 @@ DirectDriverProvider.prototype.getNewDriver = function() {
// start the local edgedriver and connect to it
var edgeServiceBuilder = new that.deps.edge.ServiceBuilder(that.seleniumConfig.executables.edgedriver);
driver = that.deps.edge.Driver.createSession(allEdgeCapabilities, edgeServiceBuilder.build());
} else if (browserName == 'MicrosoftEdgeLegacy') {
that.deps.edgelegacy = protractorModule.require('selenium-webdriver/edge');

that.logger.debug('Starting local edgelegacydriver with executable: ' +
that.seleniumConfig.executables.edgelegacydriver);

var edgelegacyOptions = [new that.deps.edgelegacy.Options(), new that.deps.edgelegacy.Options()];
_.forEach(['edgelegacydriverOptions', 'edgelegacyOptions'], function (capabilitiesKey, index) {
_.forIn(that.protConfig.capabilities[capabilitiesKey], function (value, key) {
that.deps.edgelegacy.Options.prototype[key].apply(edgelegacyOptions[index], value);
});
});
// merge capabilities
var allEdgeLegacyCapabilities = edgelegacyOptions[0].toCapabilities(edgelegacyOptions[1].toCapabilities());

// start the local edgelegacy driver and connect to it
var edgeLegacyServiceBuilder = new that.deps.edgelegacy.ServiceBuilder(that.seleniumConfig.executables.edgelegacydriver);
driver = that.deps.edgelegacy.Driver.createSession(allEdgeLegacyCapabilities, edgeLegacyServiceBuilder.build());
} else if (browserName == 'safari') {
that.deps.safari = protractorModule.require('selenium-webdriver/safari');

Expand Down
46 changes: 38 additions & 8 deletions src/connection/latestDriverVersionResolver.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,46 @@ function LatestDriverVersionResolver(config, instanceConfig, logger) {

LatestDriverVersionResolver.prototype.getLatestVersion = function (binary) {
var that = this;
return that._getLatestMajorVersion(binary)
.then(function (result) {
if (result.latestMajorVersion) {
binary.latestVersionUrl = binary.latestVersionUrl.replace(that.latestVersionRegexp, result.latestMajorVersion);
}
return that._getLatestDriverVersion(binary);
});

if (binary.latestCompleteVersionFileUrl) {
return that._getLatestCompleteVersionFromFile(binary);
} else {
return that._getLatestMajorVersionFromFile(binary)
.then(function (result) {
if (result.latestMajorVersion) {
binary.latestVersionUrl = binary.latestVersionUrl.replace(that.latestVersionRegexp, result.latestMajorVersion);
}
return that._getLatestDriverVersion(binary);
});
}
};

LatestDriverVersionResolver.prototype._getLatestCompleteVersionFromFile = function (binary) {
var that = this;

that.logger.info('Check for latest complete version of: ' + binary.filename);
return q.Promise(function (resolveFn, rejectFn) {
if (binary.latestCompleteVersionFileUrl) {
request({
url: binary.latestCompleteVersionFileUrl
}, function (error, res, body) {
if (_hasError(error, res)) {
rejectFn(_buildErrorObject(error, res, binary.filename, 'the latest version number'));
} else {
var latestVersion = _parseVersionNumber(body, binary.version);
that.logger.info('Found latest complete version of ' + binary.filename + ': ' + latestVersion);
resolveFn({
latestVersion: latestVersion
});
}
});
} else {
resolveFn({});
}
});
};

LatestDriverVersionResolver.prototype._getLatestMajorVersion = function (binary) {
LatestDriverVersionResolver.prototype._getLatestMajorVersionFromFile = function (binary) {
var that = this;

that.logger.info('Check for latest major version of: ' + binary.filename);
Expand Down
4 changes: 2 additions & 2 deletions src/runtimeResolver.js
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ var platformNamePerOsTypeString = {
mac64: 'mac'
};
var supportedBrowserNames = [
'chrome','chromium','browser','chromeMobileEmulation','firefox','ie','safari','edge','chromeHeadless'
'chrome','chromium','browser','chromeMobileEmulation','firefox','ie','safari','edge','edgelegacy','chromeHeadless'
];
var supportedPlatformNames = [
'windows','mac','linux','android','ios','winphone'
Expand All @@ -41,7 +41,7 @@ var supportedUI5Modes = [
/**
* @typedef Runtime
* @type {Object}
* @param {string(chrome|chromium|browser|firefox|ie|safari|edge)} browserName - browser name, default: chrome
* @param {string(chrome|chromium|browser|firefox|ie|safari|edge|edgelegacy)} browserName - browser name, default: chrome
* @param {number} browserVersion - browser version, default: *
* @param {string(windows|mac|linux|android|ios|winphone)} platformName - platform name, default: windows
* @param {number} platformVersion - platform number like 7,8 for windows; 4.4,5.0 for android;, default: *
Expand Down