Multiple object extraction - clickelements.py does not navigate to all the screens | Selenium Python Forum
G
Gaurav Valera Posted on 04/01/2021

Code:

import time
from selenium import webdriver

driver = webdriver.Chrome('C:\\Git_Data\\automationFrameworks\\chromedriver.exe')
driver.maximize_window()
driver.get('https://www.news18.com/')


def elementPresent(locatorType, locator):
    # present = true
    # not present = false
    element = []
    if locatorType == 'xpath':
        element = driver.find_elements_by_xpath(locator)
    elif locatorType == 'cssSelector':
        element = driver.find_elements_by_css_selector(locator)
    elif locatorType == 'id':
        element = driver.find_elements_by_id(locator)
    elif locatorType == 'name':
        element = driver.find_elements_by_name(locator)
    elif locatorType == 'className':
        element = driver.find_elements_by_class_name(locator)
    else:
        element = driver.find_elements_by_tag_name(locator)

    if len(element) == 0:
        return False
    else:
        return True


part1 = "//*[@id='mc_mainWrapper']/nav/div/ul[2]/li["
part2 = "]/a"

i = 2

while elementPresent("xpath", part1 + str(i) + part2):
    link = driver.find_element_by_xpath(part1 + str(i) + part2)
    # linktext = link.text
    # print(linktext)
    link.click()
    print(driver.title)
    time.sleep(5)
    driver.back()
    i = i + 1
else:
    print("No more elements found")

time.sleep(5)
driver.quit()

Output:

Coronavirus News in India: Latest News on Coronavirus Disease COVID-19 Symptoms, Precaution, Treatment, Coronavirus Pandemic
No more elements found

 

Please guide me on this.


G
Gaurav Valera Replied on 04/01/2021

Issue got resolved by using WebDriverWait.

Please close the ticket.

Working code:

import time
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait


def elementPresent(locatorType, locatorValue):
    wait = WebDriverWait(driver, 20)
    try:
        wait.until(EC.presence_of_element_located((locatorType, locatorValue)))
        wait.until(EC.visibility_of_element_located((locatorType, locatorValue)))

    except Exception:
        return False
    return True


driver = webdriver.Chrome('C:\\Git_Data\\automationFrameworks\\chromedriver.exe')
driver.maximize_window()
driver.get("https://www.news18.com/")

part1 = "//*[@id='mc_mainWrapper']/nav/div/ul[2]/li["
part2 = "]/a"

i = 2

while elementPresent("xpath", part1 + str(i) + part2):
    link = driver.find_element_by_xpath(part1 + str(i) + part2)
    linktext = link.text
    print(linktext)
    link.click()
    print(driver.title)
    driver.back()
    i = i + 1
else:
    print("No more elements found")

time.sleep(5)
driver.quit()