/** * Copyright JS Foundation and other contributors, http://js.foundation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. **/ var waitTime = 5000; function repeatUntilSuccess(operation, args) { // Wait at most 10 seconds. for (var i = 0; i < 200; i++) { try { var ret = operation(args); return ret; } catch (e) { if (i === 199) { console.trace(); throw e; } browser.pause(50); } } } function init() { browser.addCommand("clickWithWait", function(selector) { try { // This is necessary because there is a case that the target may exist but still moving. browser.pause(50); browser.waitForVisible(selector); var ret = repeatUntilSuccess(function(selector) { return browser.click(selector); }, selector); return ret; } catch (e) { console.trace(); throw e; } }, false); browser.addCommand("getTextWithWait", function(selector) { try { browser.waitForExist(selector); browser.waitForValue(selector); var ret = repeatUntilSuccess(function(selector) { return browser.getText(selector); }, selector); return ret; } catch (e) { console.trace(); throw e; } }, false); browser.addCommand("selectWithWait", function(selector, value) { try { browser.waitForVisible(selector, waitTime); var ret = repeatUntilSuccess(function(args) { return browser.selectByValue(args[0], args[1]); }, [selector, value.toString()]); return ret; } catch (e) { console.trace(); throw e; } }, false); } module.exports = { init: init, };