如何解决问题---在缓存中找不到元素 - 也许页面在查找后已经发生了变化

use*_*233 0 python selenium

我试图找到一组元素,然后点击每个元素,它将我带到一个新页面并在该新页面上执行一些步骤.然后单击浏览器上的后退按钮或新页面上的一个按钮,将我带到上一页,然后找到相同的元素,并对其余元素重复上述过程.

我在继续查找元素之前使用下面的代码再次查找元素,但我的代码不起作用.有人可以帮忙吗?

      elements = driver.find_elements_by_css_selector("#top-tables-chart-container > div > svg > g > g > rect")
      counter = 0
      for counter in range(counter, len(elements)):
              elements = driver.find_elements_by_css_selector("#top-tables-chart-container > div > svg > g > g > rect")
              webdriver.ActionChains(driver).move_to_element(elements[counter]).click().perform()
              time.sleep(5)
              tableNameLink= elements[counter].find_element_by_xpath("//div[@class='d3-tip bar-chart top-tables-tooltip n']//div[@class='left-section']//div[@class='table-name']//a[contains(@href,'#/table/')]")
              print tableNameLink
              tableNameLink.click()
              tableName = driver.find_element_by_xpath("//div[@class='discover-design-transform-container clearfix']//div[@class='left-header-section clearfix']//div[@class='entity-info table-type']//span[@class='entity-identifier']")
              table = tableName.text
              print " Table: " + table
              print '\n'

              if table == "lineitem":
                TableAccessFreqChartInfoBadgesValidation(self.driver).test_table_access_freq_chart_info_badges_validation("F","8","13","13")
                time.sleep(1)
                print '\n'

              if table == "orders":
                  TableAccessFreqChartInfoBadgesValidation(self.driver).test_table_access_freq_chart_info_badges_validation("D","4","9","9")
                  time.sleep(1)
                  print '\n'
    topUsagePatternsTab = driver.find_element_by_xpath("//div[@id='workload-level-tabs']//a[@href='#/topUsagePatterns']")
    topUsagePatternsTab.click()
Run Code Online (Sandbox Code Playgroud)

Mar*_*nds 5

每次返回页面时都需要重建列表,在循环结束时重建它,但是for循环引用了原始列表,该列表不再有效.一种简单的方法是使用循环内的计数器来跟踪您的位置.

elements = driver.find_elements_by_xpath("//your_path")
counter = 0
for counter in range(counter, len(elements)):
    elements = driver.find_elements_by_xpath("//your_path")
    elements[counter].click()
    time.sleep(2)
    discoverPageTables = driver.find_element_by_xpath("//your_path").text
    print "Tables Found :" + discoverPageTables
    discoverPageInstanceCount = driver.find_element_by_xpath("your_path").text
    print "Instance Count Found :" + discoverPageInstanceCount
    discoverpageWorkload = driver.find_element_by_xpath("//your_path").text
    print "Workload Percentage :" + discoverpageWorkload
    discoverPageHiveCompatible = driver.find_element_by_xpath("//your_path").text
    print "Hive Compatible :" + discoverPageHiveCompatible
    discoverPageComplexity = driver.find_element_by_xpath("your_path").text
    print "Complexity :" + discoverPageComplexity
    discoverPageNormalizedComplexity = driver.find_element_by_xpath("your_path").text
    print "Normalized Complexity :" + discoverPageNormalizedComplexity
    print '\n'
    driver.back()
    time.sleep(5)
Run Code Online (Sandbox Code Playgroud)