Back

Explore Courses Blog Tutorials Interview Questions
0 votes
2 views
in DevOps and Agile by (19.7k points)

I have an HTML code like this:

<div class="links nopreview"><span><a class="csiAction"

href="/WebAccess/home.html#URL=centric://REFLECTION/INSTANCE/_CS_Data/null">Home</a></span>&nbsp;•&nbsp;<span><span><a class="csiAction"

href="/WebAccess/home.html#URL=centric://SITEADMIN/_CS_Site">Setup</a></span>&nbsp;•&nbsp;</span><span><a

title="Sign Out" class="csiAction csiActionLink">Sign Out</a></span></div>

I would like to click on the link that has the text Home. As this Home link appears after login, I have a code like this:

from selenium import webdriver

from selenium.webdriver.common.keys import Keys

import re

browser = webdriver.Firefox() # Get local session of firefox

browser.get("http://myServer/WebAccess/login.html") # Load App page

elem = browser.find_element_by_name("LoginID") # Find the Login box

elem.send_keys("Administrator")

elem = browser.find_element_by_name("Password") # Find the Password box

elem.send_keys("Administrator" + Keys.RETURN)

#try:

elem = browser.find_element_by_link_text("Home")

elem.click()

The part till login works great. However the last but one line is problematic

elem = browser.find_element_by_link_text("Home")

It raises this NoSuchElementException where the Home link is there as you can see from the HTML code.

raise exception_class(message, screen, stacktrace)

NoSuchElementException: Message: u'Unable to locate element: {"method":"link text","selector":"Home"}' 

Any guidance as to what I am doing wrong, please?

1 Answer

0 votes
by (62.9k points)

You should try adding an implicit wait to this so that the test waits instead of running too quickly.

 from selenium import webdriver

from selenium.webdriver.common.keys import Keys

import re

 

browser = webdriver.Firefox() # Get local session of firefox

 

browser.implicitly_wait(10) #wait 10 seconds when doing a find_element before carrying on

 

browser.get("http://myServer/WebAccess/login.html") # Load App page

elem = browser.find_element_by_name("LoginID") # Find the Login box

elem.send_keys("Administrator")

elem = browser.find_element_by_name("Password") # Find the Password box

elem.send_keys("Administrator" + Keys.RETURN)

#try:

elem = browser.find_element_by_link_text("Home")

elem.click()

The implicitly_wait call makes the browser hold on until the item is present on the page and visible so that the actions can be performed on it.

Browse Categories

...