Skip to content

Commit c08dd98

Browse files
committed
add timeouts to all explicit waits
1 parent dedc50f commit c08dd98

File tree

9 files changed

+196
-95
lines changed

9 files changed

+196
-95
lines changed

packages/selenium-side-runner/src/index.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ import Capabilities from "./capabilities";
2929
import Config from "./config";
3030
import metadata from "../package.json";
3131

32+
const DEFAULT_TIMEOUT = 15000;
33+
3234
process.title = metadata.name;
3335

3436
program
@@ -40,6 +42,7 @@ program
4042
.option("-f, --filter [string]", "Filter test cases by name")
4143
.option("-w, --max-workers [number]", "Maximum amount of workers that will run your tests, defaults to number of cores")
4244
.option("--base-url [url]", "Override the base URL that was set in the IDE")
45+
.option("--timeout [number | undefined]", `The maximimum amount of time, in milliseconds, to spend attempting to locate an element. (default: ${DEFAULT_TIMEOUT})`)
4346
.option("--configuration-file [filepath]", "Use specified YAML file for configuration. (default: .side.yml)")
4447
.option("--debug", "Print debug logs")
4548
.parse(process.argv);
@@ -70,6 +73,12 @@ try {
7073

7174
configuration.server = program.server ? program.server : configuration.server;
7275

76+
configuration.timeout = program.timeout ? +program.timeout
77+
: configuration.timeout ? +configuration.timeout
78+
: DEFAULT_TIMEOUT; // eslint-disable-line indent
79+
80+
if (configuration.timeout === "undefined") configuration.timeout = undefined;
81+
7382
if (program.capabilities) {
7483
try {
7584
Object.assign(configuration.capabilities, Capabilities.parseString(program.capabilities));

packages/selianize/__tests__/command.spec.js

Lines changed: 47 additions & 47 deletions
Large diffs are not rendered by default.

packages/selianize/src/command.js

Lines changed: 28 additions & 28 deletions
Large diffs are not rendered by default.

tests/examples/check-examples.side

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,54 +10,63 @@
1010
"comment": "",
1111
"command": "open",
1212
"target": "/check.html",
13+
"targets": [],
1314
"value": ""
1415
}, {
1516
"id": "910b677a-24ba-4c90-879b-799347091085",
1617
"comment": "",
1718
"command": "check",
1819
"target": "id=f",
20+
"targets": [],
1921
"value": ""
2022
}, {
2123
"id": "e050fea7-ff7f-4a6d-86db-b65e23c66a1f",
2224
"comment": "",
2325
"command": "assertChecked",
2426
"target": "id=f",
27+
"targets": [],
2528
"value": ""
2629
}, {
2730
"id": "af271c97-e857-4d26-93dc-4306f65f326c",
2831
"comment": "",
2932
"command": "check",
3033
"target": "id=f",
34+
"targets": [],
3135
"value": ""
3236
}, {
3337
"id": "7d568629-dddc-4e85-8463-175eba18a057",
3438
"comment": "Ensure no-op on checking already checked element",
3539
"command": "assertChecked",
3640
"target": "id=f",
41+
"targets": [],
3742
"value": ""
3843
}, {
3944
"id": "ecc4ad19-5532-40fb-b33b-0afb0e8c9fe7",
4045
"comment": "",
4146
"command": "uncheck",
4247
"target": "id=f",
48+
"targets": [],
4349
"value": ""
4450
}, {
4551
"id": "449d7cc6-bcfd-43e8-a45d-69578b6a1787",
4652
"comment": "",
4753
"command": "assertNotChecked",
4854
"target": "id=f",
55+
"targets": [],
4956
"value": ""
5057
}, {
5158
"id": "0b7aeb69-49ae-4051-8e16-4df9bdb13e91",
5259
"comment": "",
5360
"command": "uncheck",
5461
"target": "id=f",
62+
"targets": [],
5563
"value": ""
5664
}, {
5765
"id": "92a69862-748c-4f28-8335-789210000b24",
5866
"comment": "Ensure no-op on unchecking already unchecked element",
5967
"command": "assertNotChecked",
6068
"target": "id=f",
69+
"targets": [],
6170
"value": ""
6271
}]
6372
}],
@@ -69,7 +78,7 @@
6978
"timeout": 300,
7079
"tests": ["6039c6d8-87e9-4fa1-b785-fdeb385b218d"]
7180
}],
72-
"urls": ["https://en.wikipedia.org"],
81+
"urls": ["https://en.wikipedia.org/"],
7382
"plugins": [],
7483
"version": "1.0",
7584
"code": {
@@ -80,7 +89,7 @@
8089
}],
8190
"tests": [{
8291
"name": "check-examples",
83-
"code": "tests.check_examples = async function check_examples(driver, vars) {await driver.get(BASE_URL + \"/check.html\");await driver.wait(until.elementLocated(By.id(\"f\")));await driver.findElement(By.id(\"f\")).then(element => { element.isSelected().then(selected => {if(!selected) { element.click();}}); });await driver.wait(until.elementLocated(By.id(\"f\")));await expect(driver.findElement(By.id(\"f\"))).resolves.toBeChecked();await driver.wait(until.elementLocated(By.id(\"f\")));await driver.findElement(By.id(\"f\")).then(element => { element.isSelected().then(selected => {if(!selected) { element.click();}}); });await driver.wait(until.elementLocated(By.id(\"f\")));await expect(driver.findElement(By.id(\"f\"))).resolves.toBeChecked();await driver.wait(until.elementLocated(By.id(\"f\")));await driver.findElement(By.id(\"f\")).then(element => { element.isSelected().then(selected => {if(selected) { element.click();}}); });await driver.wait(until.elementLocated(By.id(\"f\")));await expect(driver.findElement(By.id(\"f\"))).resolves.not.toBeChecked();await driver.wait(until.elementLocated(By.id(\"f\")));await driver.findElement(By.id(\"f\")).then(element => { element.isSelected().then(selected => {if(selected) { element.click();}}); });await driver.wait(until.elementLocated(By.id(\"f\")));await expect(driver.findElement(By.id(\"f\"))).resolves.not.toBeChecked();}"
92+
"code": "tests.check_examples = async function check_examples(driver, vars) {await driver.get(BASE_URL + \"/check.html\");await driver.wait(until.elementLocated(By.id(`f`)), configuration.timeout);await driver.findElement(By.id(`f`)).then(element => { element.isSelected().then(selected => {if(!selected) { element.click();}}); });await driver.wait(until.elementLocated(By.id(`f`)), configuration.timeout);await expect(driver.findElement(By.id(`f`))).resolves.toBeChecked();await driver.wait(until.elementLocated(By.id(`f`)), configuration.timeout);await driver.findElement(By.id(`f`)).then(element => { element.isSelected().then(selected => {if(!selected) { element.click();}}); });await driver.wait(until.elementLocated(By.id(`f`)), configuration.timeout);await expect(driver.findElement(By.id(`f`))).resolves.toBeChecked();await driver.wait(until.elementLocated(By.id(`f`)), configuration.timeout);await driver.findElement(By.id(`f`)).then(element => { element.isSelected().then(selected => {if(selected) { element.click();}}); });await driver.wait(until.elementLocated(By.id(`f`)), configuration.timeout);await expect(driver.findElement(By.id(`f`))).resolves.not.toBeChecked();await driver.wait(until.elementLocated(By.id(`f`)), configuration.timeout);await driver.findElement(By.id(`f`)).then(element => { element.isSelected().then(selected => {if(selected) { element.click();}}); });await driver.wait(until.elementLocated(By.id(`f`)), configuration.timeout);await expect(driver.findElement(By.id(`f`))).resolves.not.toBeChecked();}"
8493
}]
8594
},
8695
"dependencies": {}

tests/examples/execute-script.side

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,24 +10,28 @@
1010
"comment": "",
1111
"command": "open",
1212
"target": "/value.html",
13+
"targets": [],
1314
"value": ""
1415
}, {
1516
"id": "e7140d2f-50a6-4a97-9f3e-7303d426b255",
1617
"comment": "",
1718
"command": "executeScript",
1819
"target": "return \"sync\"",
20+
"targets": [],
1921
"value": "sync"
2022
}, {
2123
"id": "f1bb7ae5-d546-43d2-a910-489c39afb123",
2224
"comment": "",
2325
"command": "type",
2426
"target": "id=v",
27+
"targets": [],
2528
"value": "${sync}"
2629
}, {
2730
"id": "cdbdf862-553c-4366-a183-671a1b95ab94",
2831
"comment": "",
2932
"command": "assertValue",
3033
"target": "id=v",
34+
"targets": [],
3135
"value": "sync"
3236
}]
3337
}, {
@@ -38,24 +42,28 @@
3842
"comment": "",
3943
"command": "open",
4044
"target": "/value.html",
45+
"targets": [],
4146
"value": ""
4247
}, {
4348
"id": "e804bce2-5c87-47df-9a06-9b69f531418b",
4449
"comment": "",
4550
"command": "executeAsyncScript",
4651
"target": "return new Promise((r) => {setTimeout(() => {r(\"async\")}, 500)})",
52+
"targets": [],
4753
"value": "async"
4854
}, {
4955
"id": "2a32d3be-1bc4-4a1c-8141-05ae3caf512e",
5056
"comment": "",
5157
"command": "type",
5258
"target": "id=v",
59+
"targets": [],
5360
"value": "${async}"
5461
}, {
5562
"id": "dca922a2-cbf8-43c3-bba5-bf1ad1c94144",
5663
"comment": "",
5764
"command": "assertValue",
5865
"target": "id=v",
66+
"targets": [],
5967
"value": "async"
6068
}]
6169
}],
@@ -78,10 +86,10 @@
7886
}],
7987
"tests": [{
8088
"name": "execute script",
81-
"code": "tests.execute_script = async function execute_script(driver, vars) {await driver.get(BASE_URL + \"/value.html\");vars[\"sync\"] = await driver.executeScript(`return \"sync\"`);await driver.wait(until.elementLocated(By.id(\"v\")));await driver.findElement(By.id(\"v\")).then(element => {element.clear().then(() => {element.sendKeys(`${vars.sync}`);});});await driver.wait(until.elementLocated(By.id(\"v\")));await expect(driver.findElement(By.id(\"v\"))).resolves.toHaveValue(\"sync\");}"
89+
"code": "tests.execute_script = async function execute_script(driver, vars) {await driver.get(BASE_URL + \"/value.html\");vars[\"sync\"] = await driver.executeScript(`return \"sync\"`);await driver.wait(until.elementLocated(By.id(`v`)), configuration.timeout);await driver.findElement(By.id(`v`)).then(element => {element.clear().then(() => {element.sendKeys(`${vars.sync}`);});});await driver.wait(until.elementLocated(By.id(`v`)), configuration.timeout);await expect(driver.findElement(By.id(`v`))).resolves.toHaveValue(`sync`);}"
8290
}, {
8391
"name": "execute async script",
84-
"code": "tests.execute_async_script = async function execute_async_script(driver, vars) {await driver.get(BASE_URL + \"/value.html\");vars[\"async\"] = await driver.executeAsyncScript(`var callback = arguments[arguments.length - 1];return new Promise((r) => {setTimeout(() => {r(\"async\")}, 500)}).then(callback).catch(callback);`);await driver.wait(until.elementLocated(By.id(\"v\")));await driver.findElement(By.id(\"v\")).then(element => {element.clear().then(() => {element.sendKeys(`${vars.async}`);});});await driver.wait(until.elementLocated(By.id(\"v\")));await expect(driver.findElement(By.id(\"v\"))).resolves.toHaveValue(\"async\");}"
92+
"code": "tests.execute_async_script = async function execute_async_script(driver, vars) {await driver.get(BASE_URL + \"/value.html\");vars[\"async\"] = await driver.executeAsyncScript(`var callback = arguments[arguments.length - 1];return new Promise((r) => {setTimeout(() => {r(\"async\")}, 500)}).then(callback).catch(callback);`);await driver.wait(until.elementLocated(By.id(`v`)), configuration.timeout);await driver.findElement(By.id(`v`)).then(element => {element.clear().then(() => {element.sendKeys(`${vars.async}`);});});await driver.wait(until.elementLocated(By.id(`v`)), configuration.timeout);await expect(driver.findElement(By.id(`v`))).resolves.toHaveValue(`async`);}"
8593
}]
8694
},
8795
"dependencies": {}

0 commit comments

Comments
 (0)