I don't understand how can this be. The error sometimes disappears but mostly it is actual. Selenium logs show the following:
Element not found with xpath, //html
Unable to locate element: {"method":"xpath","selector":"//html"}
Command duration or timeout: 1.24 seconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.32.0', revision: '6c40c18', time: '2013-04-09 17:22:56'
System info: os.name: 'Linux', os.arch: 'i386', os.version: '2.6.32-5-686', java.version: '1.7.0_11'
Session ID: cbfc080e-f4a9-4ec9-aa72-3a8adeb0e9b9
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{platform=LINUX, databaseEnabled=true, cssSelectorsEnabled=true, javascriptEnabled=true, acceptSslCerts=true, handlesAlerts=true, browserName=firefox, browserConnectionEnabled=true, nativeEvents=false, webStorageEnabled=true, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=17.0}] [] []
Thanks in advance for any help!
UPDATE
I figured out that the problem is only actual for the following versions of the Selenium server:
selenium-server-standalone-2.31.0.jar
selenium-server-standalone-2.32.0.jar
selenium-server-standalone-2.28.0.jar works fine with such XPath locators.
I had the same problem and I have fixed these random errors, with two actions:
I have added the tag #insulated on all my features. It closes the browser for each scenario. You can find most informations on the Behat documentation.
Then, I have added the option --rerun when I execute Behat because I have few random errors on few random scenarios. There are the options in the manual (./behat --help). Quickly, you can execute behat with this option like this : bin/behat [#NamespaceMyBundle[/myFeature.feature]] --rerun .behat_rerun. (bin/behat because I use behat in a Symfony2 project and I launch the command from top directory).
A third option that I don't have implemented but is recommended on Behat doc, is to implement a spin() method which will scan and wait if an element is not available. The blog post is available here.
Two ideas:
Try changing the xpath to /html
Try changing the find method to findElement(By.ByTagName("html"));
If the error is intermittent, is it possibly because webdriver is trying to find the element before the page has loaded? If you stick an appropriate wait in there, does it get rid of the error?
Related
I have been running Protractor tests against Chrome and I have recently encountered a need to test against IE. I follow the standard procedure to set up the selenium server(webdriver-manager update=>webdriver-manager start), then I run my tests using protractor conf.js. My capabilities are straightforward with {"browserName":"internet explorer", "version":"11"}.
I encounter the following error on seemingly random tests runs. I'm using IEDriverServerv3.14.0.
{ WebDriverError: Unable to determine type from: E. Last 1 characters read: E
Build info: version: '3.14.0', revision: 'aacccce0', time: '2018-08- 02T20:13:22.693Z'
System info: host: '******', ip: '******', os.name: 'Windows
Server 2016', os.arch: 'amd64', os.version: '10.0', java.version: '10.0.2'
Driver info: driver.version: unknown
at Object.checkLegacyResponse (C:\Users\admin-jdwyer2\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\error.js:546:15)
at parseHttpResponse (C:\Users\admin-jdwyer2\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\http.js:509:13)
at doSend.then.response (C:\Users\admin-jdwyer2\AppData\Roaming\npm\node_modules\protractor\node_modules\selenium-webdriver\lib\http.js:441:30)
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7) name: 'WebDriverError', remoteStacktrace: '' }
I have searched for solutions but the only mention I could find of this error is here. Any help would be greatly appreciated!
It turns out it was a synchronization issue with my code since I'm running tests with Protractor using async/await. In my conf.js file I use the onPrepare() function to set up variables/settings before the test starts. Inside onPrepare() I was maximizing the window with browser.driver.manage().window().maximize();. The trouble happened when I didn't use await to synchronize the browser.driver.manage().window().maximize(); call with the rest of my tests so it would maximize the window randomly near the beginning of the test and throw an error.
I fixed this by making onPrepare() use async(ie change onPrepare() to async onPrepare() and changing browser.driver.manage().window().maximize(); to await browser.driver.manage().window().maximize();
I'm using chimp.js which enhances webdriver.io with some fibers magic so that the code can be defined in a synchronous way. This is the code:
var c = require('./config');
module.exports = function () {
this.When(/^I try to login with wrong credentials$/, function () {
browser.setValue(userNameField, wrongUser);
browser.setValue(passwordField, wrongPassword);
browser.click('button[value="Login"]');
});
this.When(/^I try to login with the correct credentials$/, function () {
browser.setValue(userNameField, c.userName);
browser.setValue(passwordField, c.password);
console.log('before pressig the button');
browser.click('button[value="Login"]');
console.log('logged in');
});
};
The first When executes just fine. The second When also works, I just don't get to see
logged in
on the console. Both run on the same website, and both click on the same button. In the second case, after the login succeeds, the browser is redirected to an angular SPA. Here everything loads up correctly, but that's it. The callback never happens.
Running the tests with --debug --log=command I saw this to be the last line (before the timeout)
[1;30m[01:30:18]: [0m [0;35mCOMMAND [0mPOST "/wd/hub/session/7c334efe-2417-4184-b43c-082ba4441291/element/11/click"
switching log-level to verbose, and waiting for ~5min I got the following error:
[chimp][selenium.stderr] 01:36:59.561 DEBUG - Executed: [0560aaa14e4cf874afd72336c19e299b, clickElement {id=0.6384125368203968-3}]
[chimp][selenium.stderr] 01:37:02.449 WARN - Exception thrown
org.openqa.selenium.TimeoutException: timeout: Timed out receiving message from renderer: 10.000
(Session info: chrome=47.0.2526.73)
(Driver info: chromedriver=2.19.346063 (38b35413bd4a486d436a9749e090454bc9ff6708),platform=Mac OS X 10.11.0 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 310.12 seconds
Build info: version: '2.47.1', revision: '411b314', time: '2015-07-30 03:03:16'
System info: host: '<HOST_NAME>', ip: '<IP_ADDRESS>', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.11', java.version: '1.8.0_20'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, chrome={userDataDir=/var/folders/nc/3cdxbvwj44j_gk1qj24mbr5w0000gn/T/.org.chromium.Chromium.1n3kHd}, takesHeapSnapshot=true, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=47.0.2526.73, platform=MAC, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}]
Session ID: 0560aaa14e4cf874afd72336c19e299b
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206)
at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158)
at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:595)
at org.openqa.selenium.remote.RemoteWebElement.execute(RemoteWebElement.java:273)
at org.openqa.selenium.remote.RemoteWebElement.click(RemoteWebElement.java:84)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.openqa.selenium.support.events.EventFiringWebDriver$EventFiringWebElement$1.invoke(EventFiringWebDriver.java:332)
at com.sun.proxy.$Proxy3.click(Unknown Source)
at org.openqa.selenium.support.events.EventFiringWebDriver$EventFiringWebElement.click(EventFiringWebDriver.java:345)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.openqa.selenium.remote.server.KnownElements$1.invoke(KnownElements.java:64)
at com.sun.proxy.$Proxy2.click(Unknown Source)
at org.openqa.selenium.remote.server.handler.ClickElement.call(ClickElement.java:30)
at org.openqa.selenium.remote.server.handler.ClickElement.call(ClickElement.java:1)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at org.openqa.selenium.remote.server.DefaultSession$1.run(DefaultSession.java:176)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
[chimp][selenium.stderr] 01:37:02.458 WARN - Exception: timeout: Timed out receiving message from renderer: 10.000
(Session info: chrome=47.0.2526.73)
(Driver info: chromedriver=2.19.346063 (38b35413bd4a486d436a9749e090454bc9ff6708),platform=Mac OS X 10.11.0 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 310.12 seconds
Build info: version: '2.47.1', revision: '411b314', time: '2015-07-30 03:03:16'
System info: host: '<HOST_NAME>', ip: '<IP_ADDRESS>', os.name: 'Mac OS X', os.arch: 'x86_64', os.version: '10.11', java.version: '1.8.0_20'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [{applicationCacheEnabled=false, rotatable=false, mobileEmulationEnabled=false, chrome={userDataDir=/var/folders/nc/3cdxbvwj44j_gk1qj24mbr5w0000gn/T/.org.chromium.Chromium.1n3kHd}, takesHeapSnapshot=true, databaseEnabled=false, handlesAlerts=true, hasTouchScreen=false, version=47.0.2526.73, platform=MAC, browserConnectionEnabled=false, nativeEvents=true, acceptSslCerts=true, locationContextEnabled=true, webStorageEnabled=true, browserName=chrome, takesScreenshot=true, javascriptEnabled=true, cssSelectorsEnabled=true}]
Session ID: 0560aaa14e4cf874afd72336c19e299b
[chimp][selenium.stderr] 01:37:02.471 DEBUG - Finished: POST /session/e103e58b-7ac9-4c8d-8f65-1f60295231d9/element/11/click
It takes on average between 3-7s for the first page of the SPA to be loaded, data to be initialised, ... (chrome stops showing that the page is loading). The timeout is set to 10s so I thought to increase it, via
module.exports = function () {
this.BeforeScenario(function () {
browser.timeout('script', 60 * 1000);
browser.timeout('page load', 60 * 1000);
});
};
but that didn't help either. Any idea what I could do / try?
Just to clarify again - the login page is a simple static server-side rendered HTML. After the user is logged in, they are redirected to a SPA, which is based on Angular 1.4. Pressing the login button with wrong credentials works probably, because I don't get redirected to the SPA, but back to the login page.
And all tests are run in chrome, on Mac OS X El Capitan
Update:
Now it worked once. Afterwards I've noticed, that the script continues running, when I reload the website, in case it got stuck.
The page here in question works this way:
/ page is accessed and angular initialised
ui-router routes to #/defaultroute
Controller gets initialised and downloads some initial data
new controllers get initialised inside an ng-repeat and download even more data
So yeah, its quite a bit of data downloading and waiting for the whole page to show up. Maybe that's causing troubles for chimp.js or webdriver.io?
And of course, switching from browser.click(...); to browser.key(['Enter']); doesn't work either. The same problems with getting stuck and reloading the browser fixes it. It seems like silenium maybe doesn't get the the page actually finished loading. Which is why reloading the page fixes it. Any idea how to fix that?
Btw, I've also opened an issue about this: https://github.com/xolvio/chimp/issues/165
Update 2:
In Firefox and PhantomJS it works, Safari doesn't run at all.
Maybe at this point I'd just like to know where the error is, if it's a known bug, ...
What I would do to narrow down the problem:
Run single failing test in isolation (To make sure other tests are not affecting somehow)
Access failing tests final(redirected) url directly instead through button click. for example (smth like browser.get('#/defaultroute'));
Check if the angular page doesn't do polling (continuous setTimeout, interval) which might be treated as page not loaded/synced (doubt it because it works on refresh)
One of my E2E Test is failing only on Safari browser, when trying to send Text to an inputBox.
element(by.css('#content')).clear();
element(by.css('#content')).sendKeys("%20%DCben%20von%20Xylophonmusik%20qu%E4lt%20jeden%20gr%F6%DFeren%20Zwerg%20El%20ping%FCino%20Wenceslao%20hizo%20kil%F3metros%20bajo%20exhaustiva%20ll"); //UTF Text
Seeing following error in Webdriver manager console
18:40:12.150 INFO - Executing: [send keys: 16 [[SafariDriver: safari
on MAC (null)] -> css selector: #contentText],
[Falsches%20%DCben%20von%20Xylophonmusik%20qu%E4lt%20jeden%20gr%F6%DFeren%20Zwerg%20El%20ping%FCino%20Wenceslao%20hizo%20kil%F3metros%20bajo%20exhaustiva%20lluvia%20y%20%0A%200c%F4t%E9%20de%20l%27alc%F4ve%20ovo%EFde%2C%20o%F9%20les%20b%FBche%u0E40%u18:40:42.663
WARN - Exception thrown org.openqa.selenium.TimeoutException: Timed
out awaiting response to command "sendKeysToElement" after 30004 ms
(WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 30.02 seconds Build info: version:
'2.45.0', revision: '5017cb8', time: '2015-02-26 23:59:50' System
info: host: 'vq-mac-dt-036.local', ip: '10.21.134.62', os.name: 'Mac
OS X', os.arch: 'x86_64', os.version: '10.9.5', java.version:
'1.8.0_31' Driver info: org.openqa.selenium.safari.SafariDriver
Capabilities [{browserName=safari, takesScreenshot=true,
javascriptEnabled=true, version=7.0.6, cssSelectorsEnabled=true,
platform=MAC, secureSsl=true}] Session ID: null at
sun.reflect.GeneratedConstructorAccessor57.newInstance(Unknown Source)
at
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:408)
at org.openqa.selenium.remote.ErrorHandler.createThrowa18:40:42.664
WARN - Exception: Timed out awaiting response to command
"sendKeysToElement" after 30004 ms (WARNING: The server did not
provide any stacktrace information) Command duration or timeout: 30.02
seconds
This test is working in Firefox, Chrome Browsers. I can't find any open issue related to safari driver.
Could you please advise, how to resolve this.
Thanks in advance.
Try chaining the clear, click and sendKeys functions on the input box to send the value. I don't think the UTF8 text should cause any problem. Here's how to do it -
var ele = element(by.css('#content'));
ele.clear().then(function(){
ele.click().then(function(){
ele.sendKeys("%20%DCben%20von%20Xylophonmusik%20qu%E4lt%20jeden%20gr%F6%DFeren%20Zwerg%20El%20ping%FCino%20Wenceslao%20hizo%20kil%F3metros%20bajo%20exhaustiva%20ll"); //UTF Text
});
});
Hope this helps.
I'm trying to solve it for days, please help me!
I'm running my protractor tests using chrome, firefox and internet explorer, but when I try to run the same test in Safari, I get the following error:
ScriptTimeoutError: Timed out awaiting response to command "executeScript" after 30003 ms (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 30.08 seconds
Build info: version: '2.45.0', revision: '5017cb8', time: '2015-02-26 23:59:50'
System info: host: 'myPC', ip: '192.168.0.12', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_45'
Driver info: org.openqa.selenium.safari.SafariDriver
Capabilities [{browserName=safari, takesScreenshot=true, javascriptEnabled=true, version=5.1.7, cssSelectorsEnabled=true, platform=WINDOWS, secureSsl=true}]
Session ID: null
The error comes when I try to get some url like browser.get('https://www.google.com'); I tried to run the same test in Safari in my colleague's macbook to see if the problem is my windows environment (and the older safari version 5.1.7) but had the same problem. I also tried to change the allScriptsTimeout and got the same problem, I tried many different configurations in my protractor configuration file and it didn't worked =(
I'm sure that I"m doing something wrong but have no ideia about what... I didn't found more information about this error.
Edit: There is a known issue (https://github.com/angular/protractor/issues/2111) about using protractor with safari
org.openqa.selenium.ElementNotVisibleException: Element is not currently visible and so may not be interacted with
Command duration or timeout: 21 milliseconds
Build info: version: '2.32.0', revision: '6c40c18', time: '2013-04-09 17:22:56'
System info: os.name: 'Windows 8', os.arch: 'amd64', os.version: '6.2', java.version: '1.7.0_25'
Session ID: 16492097-714b-42c4-b9dc-2c3979db180f
Driver info: org.openqa.selenium.firefox.FirefoxDriver
Capabilities [{platform=XP, databaseEnabled=true, cssSelectorsEnabled=true, javascriptEnabled=true, acceptSslCerts=true, handlesAlerts=true, browserName=firefox, browserConnectionEnabled=true, nativeEvents=true, webStorageEnabled=true, rotatable=false, locationContextEnabled=true, applicationCacheEnabled=true, takesScreenshot=true, version=22.0}]
The results of the executed scripts are not consistent. Sometimes it passes, and sometime it throws the exception mentioned above.
The script result is not same because the element might talking different amount of time for appear on page.
Using sleep can solve the problem but that is not good practice as you may have to adjust/increase the value if test case failed even after giving sleep.
Better use wait for element functionality.
Refer document # "http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp" for details
yes You need to use a conditional wait , so that your code will wait until it locates the element.
For Example:If you are using web-driver
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("username")));