protractor hangs after running a .sendKeys
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;
I am new to using protractor and am struggling with getting even a simple script running.
The symptom is "field1" is populated and then the script hangs. Removing the "await" on the .sendKeys causes the script to run but if I then move "if (await field2.isPresent()) {" down to below the "field1" sendKeys then once again only the "field1" is populated.
The issue seems to me to be around promises, but only a guess. What I need is to be able to have my .isPresent checks anywhere in my scripts. This is obviously a simplified example and is done for ease of explanation.
angular version 6
protractor.conf.js
allScriptsTimeout: 30000,
...
SELENIUM_PROMISE_MANAGER: false,
package.json extract
"cucumber": "^5.0.2",
"cucumber-html-reporter": "^4.0.4",
"jasmine": "^3.3.0",
"jasmine-core": "2.99.1",
"jasmine-spec-reporter": "4.2.1",
"protractor": "^5.4.1",
"protractor-cucumber-framework": "^6.1.1",
"protractor-html-screenshot-reporter": "0.0.21",
Given ('peek capture is running', timeout: 30000, async function ()
await browser.get('#/login');
let field1: ElementFinder = element(by.id('login-email'));
let field2: ElementFinder = element(by.id('login-password'));
let field3: ElementFinder = element(by.css('#theButton'));
if (await field1.isPresent())
if (await field2.isPresent())
await field1.sendKeys('theuser@the.org');
await field2.sendKeys('the password');
await field3.click();
await browser.sleep(1500);
return(null);
);
async-await protractor sendkeys
add a comment |
I am new to using protractor and am struggling with getting even a simple script running.
The symptom is "field1" is populated and then the script hangs. Removing the "await" on the .sendKeys causes the script to run but if I then move "if (await field2.isPresent()) {" down to below the "field1" sendKeys then once again only the "field1" is populated.
The issue seems to me to be around promises, but only a guess. What I need is to be able to have my .isPresent checks anywhere in my scripts. This is obviously a simplified example and is done for ease of explanation.
angular version 6
protractor.conf.js
allScriptsTimeout: 30000,
...
SELENIUM_PROMISE_MANAGER: false,
package.json extract
"cucumber": "^5.0.2",
"cucumber-html-reporter": "^4.0.4",
"jasmine": "^3.3.0",
"jasmine-core": "2.99.1",
"jasmine-spec-reporter": "4.2.1",
"protractor": "^5.4.1",
"protractor-cucumber-framework": "^6.1.1",
"protractor-html-screenshot-reporter": "0.0.21",
Given ('peek capture is running', timeout: 30000, async function ()
await browser.get('#/login');
let field1: ElementFinder = element(by.id('login-email'));
let field2: ElementFinder = element(by.id('login-password'));
let field3: ElementFinder = element(by.css('#theButton'));
if (await field1.isPresent())
if (await field2.isPresent())
await field1.sendKeys('theuser@the.org');
await field2.sendKeys('the password');
await field3.click();
await browser.sleep(1500);
return(null);
);
async-await protractor sendkeys
First of all, do you useif (.isPresent())
twice to make sure that the page is loaded? And second, somehow protractor doesn't work on my login page as it was non angular (even though it is angular indeed). So I had toawait browser.waitForAngularEnabled(false);
before openning the page andawait browser.waitForAngularEnabled(true);
after I logged in. But I was getting errors specific to this problem. So try second option, if doesn't help, answer first question and we'll go from there
– Sergey Pleshakov
Nov 16 '18 at 14:06
add a comment |
I am new to using protractor and am struggling with getting even a simple script running.
The symptom is "field1" is populated and then the script hangs. Removing the "await" on the .sendKeys causes the script to run but if I then move "if (await field2.isPresent()) {" down to below the "field1" sendKeys then once again only the "field1" is populated.
The issue seems to me to be around promises, but only a guess. What I need is to be able to have my .isPresent checks anywhere in my scripts. This is obviously a simplified example and is done for ease of explanation.
angular version 6
protractor.conf.js
allScriptsTimeout: 30000,
...
SELENIUM_PROMISE_MANAGER: false,
package.json extract
"cucumber": "^5.0.2",
"cucumber-html-reporter": "^4.0.4",
"jasmine": "^3.3.0",
"jasmine-core": "2.99.1",
"jasmine-spec-reporter": "4.2.1",
"protractor": "^5.4.1",
"protractor-cucumber-framework": "^6.1.1",
"protractor-html-screenshot-reporter": "0.0.21",
Given ('peek capture is running', timeout: 30000, async function ()
await browser.get('#/login');
let field1: ElementFinder = element(by.id('login-email'));
let field2: ElementFinder = element(by.id('login-password'));
let field3: ElementFinder = element(by.css('#theButton'));
if (await field1.isPresent())
if (await field2.isPresent())
await field1.sendKeys('theuser@the.org');
await field2.sendKeys('the password');
await field3.click();
await browser.sleep(1500);
return(null);
);
async-await protractor sendkeys
I am new to using protractor and am struggling with getting even a simple script running.
The symptom is "field1" is populated and then the script hangs. Removing the "await" on the .sendKeys causes the script to run but if I then move "if (await field2.isPresent()) {" down to below the "field1" sendKeys then once again only the "field1" is populated.
The issue seems to me to be around promises, but only a guess. What I need is to be able to have my .isPresent checks anywhere in my scripts. This is obviously a simplified example and is done for ease of explanation.
angular version 6
protractor.conf.js
allScriptsTimeout: 30000,
...
SELENIUM_PROMISE_MANAGER: false,
package.json extract
"cucumber": "^5.0.2",
"cucumber-html-reporter": "^4.0.4",
"jasmine": "^3.3.0",
"jasmine-core": "2.99.1",
"jasmine-spec-reporter": "4.2.1",
"protractor": "^5.4.1",
"protractor-cucumber-framework": "^6.1.1",
"protractor-html-screenshot-reporter": "0.0.21",
Given ('peek capture is running', timeout: 30000, async function ()
await browser.get('#/login');
let field1: ElementFinder = element(by.id('login-email'));
let field2: ElementFinder = element(by.id('login-password'));
let field3: ElementFinder = element(by.css('#theButton'));
if (await field1.isPresent())
if (await field2.isPresent())
await field1.sendKeys('theuser@the.org');
await field2.sendKeys('the password');
await field3.click();
await browser.sleep(1500);
return(null);
);
async-await protractor sendkeys
async-await protractor sendkeys
asked Nov 16 '18 at 10:40
David HaywardDavid Hayward
61
61
First of all, do you useif (.isPresent())
twice to make sure that the page is loaded? And second, somehow protractor doesn't work on my login page as it was non angular (even though it is angular indeed). So I had toawait browser.waitForAngularEnabled(false);
before openning the page andawait browser.waitForAngularEnabled(true);
after I logged in. But I was getting errors specific to this problem. So try second option, if doesn't help, answer first question and we'll go from there
– Sergey Pleshakov
Nov 16 '18 at 14:06
add a comment |
First of all, do you useif (.isPresent())
twice to make sure that the page is loaded? And second, somehow protractor doesn't work on my login page as it was non angular (even though it is angular indeed). So I had toawait browser.waitForAngularEnabled(false);
before openning the page andawait browser.waitForAngularEnabled(true);
after I logged in. But I was getting errors specific to this problem. So try second option, if doesn't help, answer first question and we'll go from there
– Sergey Pleshakov
Nov 16 '18 at 14:06
First of all, do you use
if (.isPresent())
twice to make sure that the page is loaded? And second, somehow protractor doesn't work on my login page as it was non angular (even though it is angular indeed). So I had to await browser.waitForAngularEnabled(false);
before openning the page and await browser.waitForAngularEnabled(true);
after I logged in. But I was getting errors specific to this problem. So try second option, if doesn't help, answer first question and we'll go from there– Sergey Pleshakov
Nov 16 '18 at 14:06
First of all, do you use
if (.isPresent())
twice to make sure that the page is loaded? And second, somehow protractor doesn't work on my login page as it was non angular (even though it is angular indeed). So I had to await browser.waitForAngularEnabled(false);
before openning the page and await browser.waitForAngularEnabled(true);
after I logged in. But I was getting errors specific to this problem. So try second option, if doesn't help, answer first question and we'll go from there– Sergey Pleshakov
Nov 16 '18 at 14:06
add a comment |
1 Answer
1
active
oldest
votes
You can make use of ExpectedConditions in protractor
https://www.protractortest.org/#/api?view=ProtractorExpectedConditions
Given ('peek capture is running', timeout: 30000, async function ()
var EC = protractor.ExpectedConditions;
var input1 = element(by.id('login-email'));
var input2 = element(by.id('login-password'));
var btn = element(by.css('#theButton'));
browser.wait(EC.visibilityOf(input1), 10000);
input1.sendKeys('****');
browser.wait(EC.visibilityOf(input2), 10000);
input2.sendKeys('****');
browser.wait(EC.isClickable(btn), 10000);
btn.click();
)
If I use "browser.wait(EC.visibilityOf(field),10000);" then the code does not stop, however looking at browser.wait I see it is returning a promise so I need an "await" on the browser.wait. If I do the problem returns and the script times out, if I do not use a await on the browser.wait then the script just runs straight through the line with no wait for the element.
– David Hayward
Nov 20 '18 at 12:16
Did you add await keyword before browser.wait?
– Bharath Kumar S
Nov 20 '18 at 12:33
Yes, if I did not then browser.wait does not wait. As I understand it if I set SELENIUM_PROMISE_MANAGER: false, then I handle promises, and as I am using new promises I used await. Am I wrong?
– David Hayward
Nov 21 '18 at 16:31
You should resolve or reject the promise.
– Bharath Kumar S
Nov 21 '18 at 16:45
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53336177%2fprotractor-hangs-after-running-a-sendkeys%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can make use of ExpectedConditions in protractor
https://www.protractortest.org/#/api?view=ProtractorExpectedConditions
Given ('peek capture is running', timeout: 30000, async function ()
var EC = protractor.ExpectedConditions;
var input1 = element(by.id('login-email'));
var input2 = element(by.id('login-password'));
var btn = element(by.css('#theButton'));
browser.wait(EC.visibilityOf(input1), 10000);
input1.sendKeys('****');
browser.wait(EC.visibilityOf(input2), 10000);
input2.sendKeys('****');
browser.wait(EC.isClickable(btn), 10000);
btn.click();
)
If I use "browser.wait(EC.visibilityOf(field),10000);" then the code does not stop, however looking at browser.wait I see it is returning a promise so I need an "await" on the browser.wait. If I do the problem returns and the script times out, if I do not use a await on the browser.wait then the script just runs straight through the line with no wait for the element.
– David Hayward
Nov 20 '18 at 12:16
Did you add await keyword before browser.wait?
– Bharath Kumar S
Nov 20 '18 at 12:33
Yes, if I did not then browser.wait does not wait. As I understand it if I set SELENIUM_PROMISE_MANAGER: false, then I handle promises, and as I am using new promises I used await. Am I wrong?
– David Hayward
Nov 21 '18 at 16:31
You should resolve or reject the promise.
– Bharath Kumar S
Nov 21 '18 at 16:45
add a comment |
You can make use of ExpectedConditions in protractor
https://www.protractortest.org/#/api?view=ProtractorExpectedConditions
Given ('peek capture is running', timeout: 30000, async function ()
var EC = protractor.ExpectedConditions;
var input1 = element(by.id('login-email'));
var input2 = element(by.id('login-password'));
var btn = element(by.css('#theButton'));
browser.wait(EC.visibilityOf(input1), 10000);
input1.sendKeys('****');
browser.wait(EC.visibilityOf(input2), 10000);
input2.sendKeys('****');
browser.wait(EC.isClickable(btn), 10000);
btn.click();
)
If I use "browser.wait(EC.visibilityOf(field),10000);" then the code does not stop, however looking at browser.wait I see it is returning a promise so I need an "await" on the browser.wait. If I do the problem returns and the script times out, if I do not use a await on the browser.wait then the script just runs straight through the line with no wait for the element.
– David Hayward
Nov 20 '18 at 12:16
Did you add await keyword before browser.wait?
– Bharath Kumar S
Nov 20 '18 at 12:33
Yes, if I did not then browser.wait does not wait. As I understand it if I set SELENIUM_PROMISE_MANAGER: false, then I handle promises, and as I am using new promises I used await. Am I wrong?
– David Hayward
Nov 21 '18 at 16:31
You should resolve or reject the promise.
– Bharath Kumar S
Nov 21 '18 at 16:45
add a comment |
You can make use of ExpectedConditions in protractor
https://www.protractortest.org/#/api?view=ProtractorExpectedConditions
Given ('peek capture is running', timeout: 30000, async function ()
var EC = protractor.ExpectedConditions;
var input1 = element(by.id('login-email'));
var input2 = element(by.id('login-password'));
var btn = element(by.css('#theButton'));
browser.wait(EC.visibilityOf(input1), 10000);
input1.sendKeys('****');
browser.wait(EC.visibilityOf(input2), 10000);
input2.sendKeys('****');
browser.wait(EC.isClickable(btn), 10000);
btn.click();
)
You can make use of ExpectedConditions in protractor
https://www.protractortest.org/#/api?view=ProtractorExpectedConditions
Given ('peek capture is running', timeout: 30000, async function ()
var EC = protractor.ExpectedConditions;
var input1 = element(by.id('login-email'));
var input2 = element(by.id('login-password'));
var btn = element(by.css('#theButton'));
browser.wait(EC.visibilityOf(input1), 10000);
input1.sendKeys('****');
browser.wait(EC.visibilityOf(input2), 10000);
input2.sendKeys('****');
browser.wait(EC.isClickable(btn), 10000);
btn.click();
)
answered Nov 16 '18 at 14:10
Bharath Kumar SBharath Kumar S
5791421
5791421
If I use "browser.wait(EC.visibilityOf(field),10000);" then the code does not stop, however looking at browser.wait I see it is returning a promise so I need an "await" on the browser.wait. If I do the problem returns and the script times out, if I do not use a await on the browser.wait then the script just runs straight through the line with no wait for the element.
– David Hayward
Nov 20 '18 at 12:16
Did you add await keyword before browser.wait?
– Bharath Kumar S
Nov 20 '18 at 12:33
Yes, if I did not then browser.wait does not wait. As I understand it if I set SELENIUM_PROMISE_MANAGER: false, then I handle promises, and as I am using new promises I used await. Am I wrong?
– David Hayward
Nov 21 '18 at 16:31
You should resolve or reject the promise.
– Bharath Kumar S
Nov 21 '18 at 16:45
add a comment |
If I use "browser.wait(EC.visibilityOf(field),10000);" then the code does not stop, however looking at browser.wait I see it is returning a promise so I need an "await" on the browser.wait. If I do the problem returns and the script times out, if I do not use a await on the browser.wait then the script just runs straight through the line with no wait for the element.
– David Hayward
Nov 20 '18 at 12:16
Did you add await keyword before browser.wait?
– Bharath Kumar S
Nov 20 '18 at 12:33
Yes, if I did not then browser.wait does not wait. As I understand it if I set SELENIUM_PROMISE_MANAGER: false, then I handle promises, and as I am using new promises I used await. Am I wrong?
– David Hayward
Nov 21 '18 at 16:31
You should resolve or reject the promise.
– Bharath Kumar S
Nov 21 '18 at 16:45
If I use "browser.wait(EC.visibilityOf(field),10000);" then the code does not stop, however looking at browser.wait I see it is returning a promise so I need an "await" on the browser.wait. If I do the problem returns and the script times out, if I do not use a await on the browser.wait then the script just runs straight through the line with no wait for the element.
– David Hayward
Nov 20 '18 at 12:16
If I use "browser.wait(EC.visibilityOf(field),10000);" then the code does not stop, however looking at browser.wait I see it is returning a promise so I need an "await" on the browser.wait. If I do the problem returns and the script times out, if I do not use a await on the browser.wait then the script just runs straight through the line with no wait for the element.
– David Hayward
Nov 20 '18 at 12:16
Did you add await keyword before browser.wait?
– Bharath Kumar S
Nov 20 '18 at 12:33
Did you add await keyword before browser.wait?
– Bharath Kumar S
Nov 20 '18 at 12:33
Yes, if I did not then browser.wait does not wait. As I understand it if I set SELENIUM_PROMISE_MANAGER: false, then I handle promises, and as I am using new promises I used await. Am I wrong?
– David Hayward
Nov 21 '18 at 16:31
Yes, if I did not then browser.wait does not wait. As I understand it if I set SELENIUM_PROMISE_MANAGER: false, then I handle promises, and as I am using new promises I used await. Am I wrong?
– David Hayward
Nov 21 '18 at 16:31
You should resolve or reject the promise.
– Bharath Kumar S
Nov 21 '18 at 16:45
You should resolve or reject the promise.
– Bharath Kumar S
Nov 21 '18 at 16:45
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53336177%2fprotractor-hangs-after-running-a-sendkeys%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
First of all, do you use
if (.isPresent())
twice to make sure that the page is loaded? And second, somehow protractor doesn't work on my login page as it was non angular (even though it is angular indeed). So I had toawait browser.waitForAngularEnabled(false);
before openning the page andawait browser.waitForAngularEnabled(true);
after I logged in. But I was getting errors specific to this problem. So try second option, if doesn't help, answer first question and we'll go from there– Sergey Pleshakov
Nov 16 '18 at 14:06