Skip to content

Commit f9aa0e2

Browse files
committed
[js] Update examples & docs to not rely on btnG on the Google search page
After years of stability, the Google search page has recently changed so that btnG is no longer visible on the page. This causes all of our examples that interact with it to fail. Instead of trying to click the search button, change examples to simply press RETURN after typing the query. Fixes #4491
1 parent 90cfe35 commit f9aa0e2

13 files changed

+40
-60
lines changed

javascript/node/selenium-webdriver/README.md

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,17 +33,14 @@ Automation in the Develop menu of Safari 10 before testing.
3333
The sample below and others are included in the `example` directory. You may
3434
also find the tests for selenium-webdriver informative.
3535

36-
var webdriver = require('selenium-webdriver'),
37-
By = webdriver.By,
38-
until = webdriver.until;
36+
const {Builder, By, Key, until} = require('selenium-webdriver');
3937

40-
var driver = new webdriver.Builder()
38+
let driver = new Builder()
4139
.forBrowser('firefox')
4240
.build();
4341

4442
driver.get('http://www.google.com/ncr');
45-
driver.findElement(By.name('q')).sendKeys('webdriver');
46-
driver.findElement(By.name('btnG')).click();
43+
driver.findElement(By.name('q')).sendKeys('webdriver', Key.RETURN);
4744
driver.wait(until.titleIs('webdriver - Google Search'), 1000);
4845
driver.quit();
4946

javascript/node/selenium-webdriver/example/async_await_test.js

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
'use strict';
3535

3636
const assert = require('assert');
37-
const {Builder, By, promise, until} = require('..');
37+
const {Builder, By, Key, promise, until} = require('..');
3838

3939
// async/await do not work well when the promise manager is enabled.
4040
// See https://github.com/SeleniumHQ/selenium/issues/3037
@@ -57,12 +57,13 @@ describe('Google Search', function() {
5757
it('example', async function() {
5858
await driver.get('https://www.google.com/ncr');
5959

60-
await driver.findElement(By.name('q')).sendKeys('webdriver');
61-
await driver.findElement(By.name('btnG')).click();
60+
await driver.findElement(By.name('q')).sendKeys('webdriver', Key.RETURN);
6261

6362
await driver.wait(until.titleIs('webdriver - Google Search'), 1000);
6463

6564
let url = await driver.getCurrentUrl();
66-
assert.equal(url, 'https://www.google.com/#q=webdriver');
65+
assert.ok(
66+
url.startsWith('https://www.google.com/search'),
67+
'unexpected url: ' + url);
6768
});
6869
});

javascript/node/selenium-webdriver/example/chrome_android.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323

2424
'use strict';
2525

26-
const {Builder, By, promise, until} = require('..');
26+
const {Builder, By, Key, promise, until} = require('..');
2727
const {Options} = require('../chrome');
2828

2929
promise.consume(function* () {
@@ -34,8 +34,7 @@ promise.consume(function* () {
3434
.setChromeOptions(new Options().androidChrome())
3535
.build();
3636
yield driver.get('http://www.google.com/ncr');
37-
yield driver.findElement(By.name('q')).sendKeys('webdriver');
38-
yield driver.findElement(By.name('btnG')).click();
37+
yield driver.findElement(By.name('q')).sendKeys('webdriver', Key.RETURN);
3938
yield driver.wait(until.titleIs('webdriver - Google Search'), 1000);
4039
} finally {
4140
yield driver && driver.quit();

javascript/node/selenium-webdriver/example/chrome_headless.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727
*/
2828

2929
const chrome = require('../chrome');
30-
const {Builder, By, until} = require('..');
30+
const {Builder, By, Key, until} = require('..');
3131

3232
const width = 640;
3333
const height = 480;
@@ -39,8 +39,8 @@ let driver = new Builder()
3939
.build();
4040

4141
driver.get('http://www.google.com/ncr')
42-
.then(_ => driver.findElement(By.name('q')).sendKeys('webdriver'))
43-
.then(_ => driver.findElement(By.name('btnG')).click())
42+
.then(_ =>
43+
driver.findElement(By.name('q')).sendKeys('webdriver', Key.RETURN))
4444
.then(_ => driver.wait(until.titleIs('webdriver - Google Search'), 1000))
4545
.then(
4646
_ => driver.quit(),

javascript/node/selenium-webdriver/example/chrome_mobile_emulation.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222

2323
'use strict';
2424

25-
const {Builder, By, promise, until} = require('..');
25+
const {Builder, By, Key, promise, until} = require('..');
2626
const {Options} = require('../chrome');
2727

2828
promise.consume(function* () {
@@ -34,8 +34,7 @@ promise.consume(function* () {
3434
new Options().setMobileEmulation({deviceName: 'Nexus 5X'}))
3535
.build();
3636
yield driver.get('http://www.google.com/ncr');
37-
yield driver.findElement(By.name('q')).sendKeys('webdriver');
38-
yield driver.findElement(By.name('btnG')).click();
37+
yield driver.findElement(By.name('q')).sendKeys('webdriver', Key.RETURN);
3938
yield driver.wait(until.titleIs('webdriver - Google Search'), 1000);
4039
} finally {
4140
yield driver && driver.quit();

javascript/node/selenium-webdriver/example/firefox_channels.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@
2727

2828
'use strict';
2929

30-
const {Builder, By, promise, until} = require('..');
30+
const {Builder, By, Key, promise, until} = require('..');
3131
const {Channel, Options} = require('../firefox');
3232

3333
let i = 0;
@@ -45,8 +45,8 @@ function doSearch(driver) {
4545
.then(_ => promise.delayed(750))
4646
// Now do the rest.
4747
.then(_ => driver.get('http://www.google.com/ncr'))
48-
.then(_ => driver.findElement(By.name('q')).sendKeys('webdriver'))
49-
.then(_ => driver.findElement(By.name('btnG')).click())
48+
.then(_ =>
49+
driver.findElement(By.name('q')).sendKeys('webdriver', Key.RETURN))
5050
.then(_ => driver.wait(until.titleIs('webdriver - Google Search'), 1000))
5151
.then(_ => driver.quit());
5252
}

javascript/node/selenium-webdriver/example/google_search.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,14 +37,14 @@
3737
* node selenium-webdriver/example/google_search.js
3838
*/
3939

40-
const {Builder, By, until} = require('..');
40+
const {Builder, By, Key, until} = require('..');
4141

4242
var driver = new Builder()
4343
.forBrowser('firefox')
4444
.build();
4545

4646
driver.get('http://www.google.com/ncr')
47-
.then(_ => driver.findElement(By.name('q')).sendKeys('webdriver'))
48-
.then(_ => driver.findElement(By.name('btnG')).click())
47+
.then(_ =>
48+
driver.findElement(By.name('q')).sendKeys('webdriver', Key.RETURN))
4949
.then(_ => driver.wait(until.titleIs('webdriver - Google Search'), 1000))
5050
.then(_ => driver.quit());

javascript/node/selenium-webdriver/example/google_search_generator.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828

2929
'use strict';
3030

31-
const {Builder, By, promise, until} = require('..');
31+
const {Builder, By, Key, promise, until} = require('..');
3232

3333
promise.consume(function* () {
3434
let driver;
@@ -38,10 +38,7 @@ promise.consume(function* () {
3838
yield driver.get('http://www.google.com/ncr');
3939

4040
let q = yield driver.findElement(By.name('q'));
41-
yield q.sendKeys('webdriver');
42-
43-
let btnG = yield driver.findElement(By.name('btnG'));
44-
yield btnG.click();
41+
yield q.sendKeys('webdriver', Key.RETURN);
4542

4643
yield driver.wait(until.titleIs('webdriver - Google Search'), 1000);
4744
} finally {

javascript/node/selenium-webdriver/example/google_search_test.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
* mocha -t 10000 selenium-webdriver/example/google_search_test.js
3030
*/
3131

32-
const {Builder, By, until} = require('..');
32+
const {Builder, By, Key, until} = require('..');
3333
const test = require('../testing');
3434

3535
test.describe('Google Search', function() {
@@ -42,8 +42,8 @@ test.describe('Google Search', function() {
4242
// You can write tests either using traditional promises.
4343
it('works with promises', function() {
4444
return driver.get('http://www.google.com/ncr')
45-
.then(_ => driver.findElement(By.name('q')).sendKeys('webdriver'))
46-
.then(_ => driver.findElement(By.name('btnG')).click())
45+
.then(_ =>
46+
driver.findElement(By.name('q')).sendKeys('webdriver', Key.RETURN))
4747
.then(_ => driver.wait(until.titleIs('webdriver - Google Search'), 1000));
4848
});
4949

@@ -52,8 +52,7 @@ test.describe('Google Search', function() {
5252
// generator.
5353
test.it('works with generators', function*() {
5454
yield driver.get('http://www.google.com/ncr');
55-
yield driver.findElement(By.name('q')).sendKeys('webdriver');
56-
yield driver.findElement(By.name('btnG')).click();
55+
yield driver.findElement(By.name('q')).sendKeys('webdriver', Key.RETURN);
5756
yield driver.wait(until.titleIs('webdriver - Google Search'), 1000);
5857
});
5958

javascript/node/selenium-webdriver/example/logging.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,15 @@
2121

2222
'use strict';
2323

24-
const {Builder, By, logging, until} = require('..');
24+
const {Builder, By, Key, logging, until} = require('..');
2525

2626
logging.installConsoleHandler();
2727
logging.getLogger('webdriver.http').setLevel(logging.Level.ALL);
2828

2929
var driver = new Builder().forBrowser('firefox').build();
3030

3131
driver.get('http://www.google.com/ncr')
32-
.then(_ => driver.findElement(By.name('q')).sendKeys('webdriver'))
33-
.then(_ => driver.findElement(By.name('btnG')).click())
32+
.then(_ =>
33+
driver.findElement(By.name('q')).sendKeys('webdriver', Key.RETURN))
3434
.then(_ => driver.wait(until.titleIs('webdriver - Google Search'), 1000))
3535
.then(_ => driver.quit());

0 commit comments

Comments
 (0)