Python Learner
Python Learner

Reputation: 129

web element not detecting in selenium in a FOR LOOP

I'm trying to fetch some information from specific web elements. The problem is that when i try to fetch the information without for loop the program works like a charm. But the same when i put it in a for loop and try it does not detect the web elements in the loop. Here's the code i have been trying:

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys
import time
from lxml import html
import requests
import xlwt



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

# 0 wait until the pages are loaded
browser.implicitly_wait(3) # 3 secs should be enough. if not, increase it

browser.get("http://ae.bizdirlib.com/taxonomy/term/1493") # Load page
links = browser.find_elements_by_css_selector("h2 > a")

def test():#test function
    elems = browser.find_elements_by_css_selector("div.content.clearfix > div > fieldset> div > ul > li > span")
    print elems
    for elem in elems:
        print elem.text
    elem1 = browser.find_elements_by_css_selector("div.content.clearfix>div>fieldset>div>ul>li>a")
    for elems21 in elem1:
        print elems21.text
        return 0


for link in links:
    link.send_keys(Keys.CONTROL + Keys.RETURN)
    link.send_keys(Keys.CONTROL + Keys.PAGE_UP)
    time.sleep(5)
    test() # Want to call test function    
    link.send_keys(Keys.CONTROL + 'w')

The output i get when i print the object is a empty array as the output []. Can somebody help me enhance it. Newbie to selenium.

In the previous question i had asked about printing. But the problem lies is that it self is that the element is not detecting by itself. This way question is totally different.

Upvotes: 0

Views: 511

Answers (1)

Mesut GUNES
Mesut GUNES

Reputation: 7411

I couldnt open the page but as I understand you want to open links sequencially and do something. With link.send_keys(Keys.CONTROL + 'w') you are closing the newly opened tab so your links open in a new tab. In this condition must switch to new window so that you can reach the element in new window. You can query windows by driver.window_handles and switch to last window by driver.switch_to_window(driver.window_handles[-1]) and after you closed the window you must switch back to the first window by driver.switch_to_window(driver.window_handles[0])

for link in links:
    link.send_keys(Keys.CONTROL + Keys.RETURN)

    # switch to new window
    driver.switch_to_window(driver.window_handles[-1])

    link.send_keys(Keys.CONTROL + Keys.PAGE_UP) # dont know why
    time.sleep(5)
    test() # Want to call test function    
    link.send_keys(Keys.CONTROL + 'w')

    #switch back to the first window
    driver.switch_to_window(driver.window_handles[0])

Upvotes: 2

Related Questions