d-b
d-b

Reputation: 971

Why doesn't Selenium find element by name? (Python, Firefox)

I have the following HTML

<button name="_eventId_confirmed" class="btn btn-green margin-bottom-20 bold medium" autofocus="">

and the following Python

btn = driver.find_element_by_name('_eventId_confirmed')

Running this code returns an error

selenium.common.exceptions.NoSuchElementException: Message: Unable to locate element: [name="_eventId_confirmed"]

Just before this non-working HTML/code-combination I have the following HTML element:

<input name="registration" id="registration" class="size-28" maxlength="7" autofocus="" autocomplete="off" type="text" data-original-title="" title="" style="">

which I successfully access with

elem = driver.find_element_by_name("registration")

Why does the second one work but not the first one?

Edit: the problem was that a new window was opened and I needed to switch window handler. So, false alarm. Thank you all.

Upvotes: 0

Views: 650

Answers (3)

KunduK
KunduK

Reputation: 33384

You can do it by using window_handles and switch_to_window method.

Before clicking the button the window handle as

window_before = driver.window_handles[0]

elem = driver.find_element_by_name("registration")

after clicking the button the window handle of newly opened window as

window_after = driver.window_handles[1]

then execute the switch to window methow to move to newly opened window

driver.switch_to.window(window_after)

driver.find_element_by_name("_eventId_confirmed").click()

Hope this help.

Upvotes: 1

WilliamsQA
WilliamsQA

Reputation: 11

This could be because of the modal dialogue, as you mentioned in a comment. Try

driver.switchTo().frame("ModalFrameTitle");

or

driver.switchTo().activeElement()

Upvotes: 1

natn2323
natn2323

Reputation: 2061

A "tag name" is not the same as a "name". The former refers to the HTML element's tag name, while the later refers to the HTML element's "name" attribute.

For example, in your first HTML snippet,

<button name="_eventId_confirmed" class="btn btn-green margin-bottom-20 bold medium" autofocus="">

button is the tag name while _eventId_confirmed is the (attribute) name.

Upvotes: 1

Related Questions