0

i started using selenuim, node js

it was working all perfect so far, sudenly the same script is throwing and error

"unhandled promise rejection warning element not interactable"

i tried setting wait, until and nothing

<script>

  const {Builder, By, Key, until, wait } = require('selenium-webdriver');

  var driver = new Builder()
.forBrowser('chrome')
.build();


 driver.manage().window().maximize() 
 driver.get('http://www.google.com/testsite')
driver.findElement(By.id('username')).sendKeys('test@emal');
driver.findElement(By.id('password')).sendKeys('passowrod');
driver.findElement(By.className('acceder')).click();
driver.quit();


</script>

i search all over but all examples simply did not work for me, due that they dont have that issues,..

https://www.youtube.com/watch?v=C6qQojzN7bE&index=4&list=PLA4JPGpQHctT__mDO9EHvOrWVW0Hkf5Mk

walter alexander
  • 179
  • 2
  • 18
  • Is that your working example? The URL provided (https://www.google.com/testsite) generates a 404. – Joao Pereira Feb 25 '19 at 16:48
  • Would you please check the element with classname "acceder" exist before you click?? Or would you post your HTML here? – Robin Ding Feb 25 '19 at 16:49
  • driver.get('https://www.exclusivetravelerclub.com/en/home-login?redirect=exclusive-resorts/catalonia-royal-la-romana?&utm_source=newsletter&utm_medium=email&utm_campaign=Retencion%20Feb2019%20USA&utm_term=Gold&utm_content=Noches4x3%20CRR'); ............ that is the currect url, this lies on that it doesnt event do anything after the page is loaded – walter alexander Feb 25 '19 at 16:54
  • From my understanding, you're trying to access the element whose class name is `boton acceder`. However, there are multiple elements with that class name, and therefore you will need to use the `xpath()` method. Try replacing `By.className('acceder'))` with `By.xpath("(//button[@class='boton acceder'])[1]")`. I cannot predict which index will do the trick, you'll have to try it yourself. – Joao Pereira Feb 25 '19 at 17:24
  • the issue is not the click by itself, the sendKeys doesnt work either – walter alexander Feb 25 '19 at 18:12
  • 1
    Been over this for a few hours, and managed to get the username field filled but it would get stuck in the password step. It's odd because by calling the `getText()` function, an empty string is returned, even if the object exists. By the way, the consideration I made about multiple objects with the same class name, also exists with the ID, since 2 elements share both the `username` and `password` IDs. – Joao Pereira Feb 25 '19 at 20:50

2 Answers2

2

These locators worked for me for the url you shared:

driver.findElement(By.xpath('(//input[@id="username"])[2]')).sendKeys('test@emal');
driver.findElement(By.xpath('(//input[@id="password"])[2]')).sendKeys('passowrod');
driver.findElement(By.xpath('(//button[@class="boton acceder"])[2]')).click();

The reason for using 2nd index for all the elements is that the same elements are in HEADER which are hidden.

Note: I tried these in python, so please adjust if any string syntax error.

Kamal
  • 2,384
  • 1
  • 13
  • 25
  • it did worked for me, for some reason only by.xpath work, by.id or by.cssSelector doesnt. but thansk alot – walter alexander Feb 26 '19 at 19:28
  • Yes, because when you use id or cssSelector, it would find the first match from top of page and that is not shown in UI. So to get the second result, I had to use xpath with index of 2. – Kamal Feb 27 '19 at 01:18
2

The problem: While running the automation, the window size is is not fully presented on screen so some elements are rendered outside of the visible area in your configured chrome web driver.

The solution would be using this snippet in your base configuration:

browser.driver.manage().window().maximize();
avivamg
  • 12,197
  • 3
  • 67
  • 61