almanegra
almanegra

Reputation: 663

Writing value on the current textbox - Selenium

Well I'm facing an issue here:
I use Selenium to automate test on my application, and I use the following code to fill a textbox:

driver.find_element_by_id("form_widget_serial_number").send_keys("example", u'\u0009')

All the textboxes have the same id (form_widget_serial_number) so it's impossible to select a specific textbox by using selection by id (the code above selects the first textbox and u'\u0009' changes the cursor position to the next textbox).

enter image description here

Anyway, how can I send values to the "current" textbox without using find_element_by_id or another selector, given that the cursor is in the current textbox?

Upvotes: 0

Views: 2724

Answers (3)

Kache
Kache

Reputation: 16737

There are several selectors available to you - Xpath and css in particular are very powerful.

Xpath can even select by the text of an element and then access its second sibling1:

elem = driver.find_element(:xpath, "//div[contains(text(), 'match this text')]/following-sibling::*[2]")

If you need to find the current element that has focus:

focused_elem = driver.switch_to.active_element

And then to find the next one:

elem_sibling = focused_elem.find_element(:xpath, "following-sibling::*")

Using this example, you could easily traverse any sequence of sequential elements, which would appear to solve your problem.

Take a close look at the structure of the page and then see how you would navigate to the element you need from a reference you can get to. There is probably an Xpath or css selector that can make the traversal across the document.

1 FYI, I'm using an old version of Selenium in Ruby, in case your version's syntax is different

Upvotes: 3

Sebastian
Sebastian

Reputation: 6067

My approach would be:

  1. Get a list of all contemplable elements by the known id
  2. Loop over them until you find a focused element
  3. Use send_keys to write into that element

To get the focused element something like

get_element_index('dom=document.activeElement')

might work. See this question for more information.

Edit: If the list you get from 1. is accidently sorted properly the index of an element in this list might even represent the number of u'\u0009' you have to send to reach that specific element.

Upvotes: 1

Sitam Jana
Sitam Jana

Reputation: 3129

Use ActionChains utility to do that. Use following code:

from selenium.webdriver.common.action_chains import ActionChains

ActionChains(driver).send_keys("Hello").perform()

Upvotes: 0

Related Questions