0

enter image description hereenter image description hereI am getting the mentioned exception when trying to automate Web-table using selenium Python. below is my code

import time
from selenium import webdriver
from selenium.common.exceptions import StaleElementReferenceException

driver = webdriver.Chrome("E:\pythonProject\Framefork1\BrowserDrivers\chromedriver.exe")
driver.maximize_window()
driver.get("https://admin-demo.nopcommerce.com/Admin/Customer/List")
driver.find_element_by_xpath("/html/body/div[6]/div/div/div/div/div[2]/div[1]/div/form/div[3]/input").click()

time.sleep(5)
table = driver.find_element_by_xpath("(//table[@class='table table-bordered table-hover table-striped dataTable no-footer'])[2]")
body = table.find_element_by_tag_name("tbody")
cells = body.find_elements_by_tag_name("td")
rows = body.find_elements_by_tag_name("tr")
links = driver.find_elements_by_xpath("//i[@class='fa fa-pencil']")
print(len(rows))

for i in range(len(rows)):
    col = rows[i].find_elements_by_tag_name("td")
    for j in range(len(col)):`enter code here`
        if col[j].text == "Registered":
            time.sleep(5)
            links[i].click()
            driver.find_element_by_link`_text("back to customer list").click()

For business scenario I have attached a doc for reference

  • `selenium` doesn't give you python's elements but references to objects in browser and when you click and load new page then you loose access to these objects. First you have to get all `.text`, links,`.find_elements_*`, etc from objects on current page and later use `for`-loop with `click()` – furas Feb 06 '21 at 04:24

1 Answers1

0

selenium doesn't give you python's elements but references to objects on current page in web browser. When you click and load new page then you loose access to these objects.

First you have to get all links as text and later use them with driver.get()


import time
from selenium import webdriver
from selenium.common.exceptions import StaleElementReferenceException

driver = webdriver.Chrome()#"E:\pythonProject\Framefork1\BrowserDrivers\chromedriver.exe")
driver.maximize_window()

driver.get("https://admin-demo.nopcommerce.com/Admin/Customer/List")
driver.find_element_by_xpath("//input[@type='submit']").click()

time.sleep(5)
table = driver.find_element_by_xpath("(//table[@class='table table-bordered table-hover table-striped dataTable no-footer'])[2]")
body = table.find_element_by_tag_name("tbody")
cells = body.find_elements_by_tag_name("td")
rows = body.find_elements_by_tag_name("tr")
#links = driver.find_elements_by_xpath("//i[@class='fa fa-pencil']")
links = driver.find_elements_by_xpath("//a[@class='btn btn-default']")

print(len(rows))

# -- first get all links ---

links_to_click = []

for i in range(len(rows)):
    col = rows[i].find_elements_by_tag_name("td")
    for j in range(len(col)):
        if col[j].text == "Registered":
            links_to_click.append(links[i].get_attribute('href'))

print(links_to_click)

# --- next visit all links ---

for link in links_to_click:
    driver.get(link)
    #driver.find_element_by_link_text("back to customer list").click()
furas
  • 134,197
  • 12
  • 106
  • 148