Skip to content

Commit a75c711

Browse files
author
Oleksandr_Travienikov
committed
fix(chromedriver): don't ignore patch version for specific download
1 parent 2f18bd5 commit a75c711

File tree

2 files changed

+93
-27
lines changed

2 files changed

+93
-27
lines changed

lib/binaries/chrome_xml.ts

+71-27
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,8 @@ export class ChromeXml extends XmlConfigSource {
8181
latest = item;
8282
latestVersion = item.split('/')[0];
8383
} else if (
84-
iterVersion.startsWith(this.maxVersion) &&
85-
semver.gt(iterVersion, chromedriverVersion)) {
84+
iterVersion.startsWith(this.maxVersion) &&
85+
semver.gt(iterVersion, chromedriverVersion)) {
8686
// After the first time, make sure the semantic version is greater.
8787
chromedriverVersion = iterVersion;
8888
latest = item;
@@ -107,34 +107,78 @@ export class ChromeXml extends XmlConfigSource {
107107
*/
108108
private getSpecificChromeDriverVersion(inputVersion: string): Promise<BinaryUrl> {
109109
return this.getVersionList().then(list => {
110-
const specificVersion = getValidSemver(inputVersion);
111-
if (specificVersion === '') {
112-
throw new Error(`version ${inputVersion} ChromeDriver does not exist`)
113-
}
110+
111+
const isLong = inputVersion.split('.').length === 4;
114112
let itemFound = '';
115-
for (let item of list) {
116-
// Get a semantic version.
117-
let version = item.split('/')[0];
118-
if (semver.valid(version) == null) {
119-
const lookUpVersion = getValidSemver(version);
120-
121-
if (semver.valid(lookUpVersion)) {
122-
// Check to see if the specified version matches.
123-
if (lookUpVersion === specificVersion) {
124-
// When item found is null, check the os arch
125-
// 64-bit version works OR not 64-bit version and the path does not have '64'
126-
if (itemFound == '') {
127-
if (this.osarch === 'x64' ||
113+
114+
if (!isLong) {
115+
const specificVersion = getValidSemver(inputVersion);
116+
if (specificVersion === '') {
117+
throw new Error(`version ${inputVersion} ChromeDriver does not exist`)
118+
}
119+
for (let item of list) {
120+
// Get a semantic version.
121+
let version = item.split('/')[0];
122+
if (semver.valid(version) == null) {
123+
const lookUpVersion = getValidSemver(version);
124+
125+
if (semver.valid(lookUpVersion)) {
126+
// Check to see if the specified version matches.
127+
if (lookUpVersion === specificVersion) {
128+
// When item found is null, check the os arch
129+
// 64-bit version works OR not 64-bit version and the path does not have '64'
130+
if (itemFound == '') {
131+
if (this.osarch === 'x64' ||
128132
(this.osarch !== 'x64' && !item.includes(this.getOsTypeName() + '64'))) {
129-
itemFound = item;
130-
}
133+
itemFound = item;
134+
}
131135

136+
}
137+
// If the semantic version is the same, check os arch.
138+
// For 64-bit systems, prefer the 64-bit version.
139+
else if (this.osarch === 'x64') {
140+
if (item.includes(this.getOsTypeName() + '64')) {
141+
itemFound = item;
142+
}
143+
}
132144
}
133-
// If the semantic version is the same, check os arch.
134-
// For 64-bit systems, prefer the 64-bit version.
135-
else if (this.osarch === 'x64') {
136-
if (item.includes(this.getOsTypeName() + '64')) {
137-
itemFound = item;
145+
}
146+
}
147+
}
148+
} else {
149+
// Splitting to two semver objects because of clunky chromedriver versioning
150+
// Supports e.g. 76.0.3809.68 while not ignoring the last patch number
151+
const inputVersionPart1 = inputVersion.split('.').slice(0, 3).join('.');
152+
const inputVersionPart2 = inputVersion.split('.').slice(1, 4).join('.');
153+
154+
const specificVersion1 = getValidSemver(inputVersionPart1);
155+
const specificVersion2 = getValidSemver(inputVersionPart2);
156+
if (specificVersion1 === '' || specificVersion2 === '') {
157+
throw new Error(`version ${inputVersion} ChromeDriver does not exist`);
158+
}
159+
160+
for (let item of list) {
161+
// Get a semantic version.
162+
let version = item.split('/')[0];
163+
if (semver.valid(version) == null) {
164+
const versionPt1 = version.split('.').slice(0, 3).join('.');
165+
const versionPt2 = version.split('.').slice(1, 4).join('.');
166+
const lookUpVersion1 = getValidSemver(versionPt1);
167+
const lookUpVersion2 = getValidSemver(versionPt2);
168+
if (semver.valid(lookUpVersion1) && semver.valid(lookUpVersion2)) {
169+
// Check to see if the specified version matches.
170+
if (lookUpVersion1 === specificVersion1 && lookUpVersion2 === specificVersion2) {
171+
// When item found is null, check the os arch
172+
// 64-bit version works OR not 64-bit version and the path does not have '64'
173+
if (itemFound == '') {
174+
if (this.osarch === 'x64' ||
175+
(this.osarch !== 'x64' && !item.includes(this.getOsTypeName() + '64'))) {
176+
itemFound = item;
177+
}
178+
} else if (this.osarch === 'x64') {
179+
if (item.includes(this.getOsTypeName() + '64')) {
180+
itemFound = item;
181+
}
138182
}
139183
}
140184
}
@@ -176,7 +220,7 @@ export function getValidSemver(version: string): string {
176220
}
177221
// This supports downloading 74.0.3729.6
178222
try {
179-
const newRegex = /(\d+.\d+.\d+).\d+/g;
223+
const newRegex = /(\d+.\d+.\d+)/g;
180224
const exec = newRegex.exec(version);
181225
if (exec) {
182226
lookUpVersion = exec[1];

spec/binaries/chrome_xml_spec.ts

+22
Original file line numberDiff line numberDiff line change
@@ -66,4 +66,26 @@ describe('chrome xml reader', () => {
6666
done();
6767
});
6868
});
69+
70+
it('should get 76.0.3809.68 version', (done) => {
71+
let chromeXml = new ChromeXml();
72+
chromeXml.out_dir = out_dir;
73+
chromeXml.ostype = 'Windows_NT';
74+
chromeXml.osarch = 'x64';
75+
chromeXml.getUrl('76.0.3809.68').then((binaryUrl) => {
76+
expect(binaryUrl.url).toContain('76.0.3809.68/chromedriver_win32.zip');
77+
done();
78+
});
79+
});
80+
81+
it('should get 76.0.3809.12 version', (done) => {
82+
let chromeXml = new ChromeXml();
83+
chromeXml.out_dir = out_dir;
84+
chromeXml.ostype = 'Windows_NT';
85+
chromeXml.osarch = 'x64';
86+
chromeXml.getUrl('76.0.3809.12').then((binaryUrl) => {
87+
expect(binaryUrl.url).toContain('76.0.3809.12/chromedriver_win32.zip');
88+
done();
89+
});
90+
});
6991
});

0 commit comments

Comments
 (0)