4

Issue: How can you read a value in a nested <div>?

Situation: I am testing the registration on our web site. In order to complete the process, the user will need to enter the captcha. Using a helper class (on our dev server) we can display (hidden) the current captcha. I need to grab that and save it to be used by a .send_keys function (that part is the easy part). I have no code to share with what I am using, as I am not even sure where to jump in.

Well, I have this, but this is obviously not the answer:

driver.find_element_by_id("capchta").send_keys("foobar")

With above, I can send a key value (seen as "foobar"). I just need to replace "foobar" with a string that I read in the value=XXX

Here is the HTML code with the captcha, represented with the value=XXXX.

<div id="code_area">
     <p id="captcha_blurb">Please enter the security code below</p>
     <div id="capchta_area">
     <img id="secuity_icon" src="/img3/Secuity-Icon.png">
     <img id="security-image" src="data:image/png;==">
     <input id="current_captcha" type="hidden" value="XXXX">
     <input id="capchta" class="reg_form_input" value="" name="code" placeholder="Enter Security Code" title=" Please Enter These Characters." onblur="removeInputInfoBox('reg_box');" onfocus="addInputInfoBox('#capchta','#capchta_area', 'reg_box');">
</div>
Yi Zeng
  • 32,020
  • 13
  • 97
  • 125
Dave
  • 1,031
  • 7
  • 19
  • 29

2 Answers2

7

I don't think you need to execute JS to get the hidden input's value.

You can use get_attribute to the value attribute

get_attribute(name)

So in your case, try:

captcha_value = driver.find_element_by_id("current_captcha").get_attribute("value")
driver.find_element_by_id("capchta").send_keys(captcha_value)
Yi Zeng
  • 32,020
  • 13
  • 97
  • 125
1

As explained here Selenium can't interact with hidden elements. You're going to need to execute javascript to change the value for you; which is still a perfectly valid and accepted way of using Selenium.

Community
  • 1
  • 1
blakev
  • 4,154
  • 2
  • 32
  • 52
  • 2
    It states, "Selenium WebDriver cannot interact with hidden elements, it can only find them" I am not trying to interact with it. Just find it. If I can find the `value=XXXX`, then I can capture it to a string and `.send_keys(XXXX)`, exactly what I want. – Dave Aug 29 '13 at 01:22