Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

python selenium click nth element

below is the inspected code, when the mouse is hovererd above the image, and basically i want the image to be clicked....

<ul id="product-list">

    <li class="product one-col new">
        <ul>
            <li class="image" title="sample image">
                <a href="#product/1d77e790-f74a-3859-97db-c513cbece39c">
                    <img width="" height="" alt="" src="/content/images/1.jpg"></img>
                    <span class="new"> … </span>
                    <span class="hover"></span>
                </a>
                <p class="retailer"> … </p>
                <p class="brand"></p>
            </li>
            <li class="price"> … </li>
            <li class="name" title="sample image"> … </li>
            <li class="first-seen"> … </li>
        </ul>
    </li>
    <li class="product one-col new"> … </li>
    <li class="product one-col new"> … </li>
    <li class="product one-col new"> … </li>

i am using python selenium, and have tried the below to click the span (hover) link

browser.find_element_by_css_selector("ul#product-list > :first-child > ul > li.image > a > span.hover ").click

however this does not work...any idea?

update:

browser.find_element_by_css_selector("ul#product-list > :first-child > ul > li.image > a > span.hover ").click()


 File "/usr/lib/python2.7/site-packages/selenium-2.35.0-py2.7.egg/selenium/webdriver/remote/errorhandler.py", line 164, in check_response
    raise exception_class(message, screen, stacktrace)
ElementNotVisibleException: Message: u'Element is not currently visible and so may not be interacted with' ; Stacktrace: 
    at fxdriver.preconditions.visible (file:///tmp/tmp6Pgi9F/extensions/[email protected]/components/command_processor.js:8231)
    at DelayedCommand.prototype.checkPreconditions_ (file:///tmp/tmp6Pgi9F/extensions/[email protected]/components/command_processor.js:10823)
    at DelayedCommand.prototype.executeInternal_/h (file:///tmp/tmp6Pgi9F/extensions/[email protected]/components/command_processor.js:10840)
    at DelayedCommand.prototype.executeInternal_ (file:///tmp/tmp6Pgi9F/extensions/[email protected]/components/command_processor.js:10845)
    at DelayedCommand.prototype.execute/< (file:///tmp/tmp6Pgi9F/extensions/[email protected]/components/command_processor.js:10787) 

update:

this does not work too...

browser.find_element_by_css_selector("ul#product-list > :first-child > ul > li.image > a ").click()

update:

also tried actionchains , mouse click..still no luck..

element = browser.find_element_by_css_selector("ul#product-list > :first-child > ul > li.image")
    hov = ActionChains(browser).move_to_element(element)
    hov.click()

SOLVED: finally this worked...

element_to_hover_over = driver.find_element_by_css_selector("ul#product-list > :first-child ")
hover = ActionChains(driver).move_to_element(element_to_hover_over)
hover.perform()
if "" == driver.find_element_by_css_selector("span.hover").text:
    driver.find_element_by_css_selector("span.hover").click()
like image 425
krisdigitx Avatar asked Oct 13 '13 12:10

krisdigitx


People also ask

How do you select the nth element in selenium?

You can use “tag:nth-of-type(n)”. It will select the nth tag element of the list.

How do you get to the nth sub element using the XPath?

By adding square brackets with index. By using position () method in xpath.

How do you select the second element in selenium?

click();//If there are only two such element, here 1 is index of 2nd element in list returned. Option two works!

How do you select a child element in selenium?

We can locate child nodes of web elements with Selenium webdriver. First of all we need to identify the parent element with help of any of the locators like id, class, name, xpath or css. Then we have to identify the children with the findElements(By. xpath()) method.


1 Answers

Your code missing (). Without (), click method is not called.

browser.find_element_by_css_selector("ul...span.hover ").click()
#                                                             ^^

element = browser.find_element_by_css_selector("ul#product-list > :first-child > ul > li.image > a > span.hover ")
browser.execute_script("arguments[0].innerText = 'asdf';", element)
element.click()
like image 62
falsetru Avatar answered Sep 18 '22 05:09

falsetru