Selenium Python循环遍历表来打印列值我得到的元素不再有效

时间:2015-08-21 22:02:25

标签: python-2.7 selenium selenium-webdriver

我有一个包含16行和5列HTML表的页面。 我有一个循环表格并打印出单元格值的方法。 我收到以下错误:

    raise exception_class(message, screen, stacktrace)
StaleElementReferenceException: Message: Element is no longer valid

错误发生在这一行:

col_name = row.find_elements(By.TAG_NAME, "td")[1] # This is the Name column

我的方法代码是:

def get_variables_col_values(self):
        try:
            table_id = self.driver.find_element(By.ID, 'data_configuration_variables_ct_fields_body1')
            #time.sleep(10)
            rows = table_id.find_elements(By.TAG_NAME, "tr")
            print "Rows length"
            print len(rows)
            for row in rows:
                # Get the columns
                print "cols length"
                print len(row.find_elements(By.TAG_NAME, "td"))
                col_name = row.find_elements(By.TAG_NAME, "td")[1] # This is the Name column                print "col_name.text = "
                print col_name.text   
        except NoSuchElementException, e:
           return False

我得到的元素不再有效,因为dom已更新,已更改? 该表尚未完成加载? 我该怎么解决这个问题? 我是否需要等待页面完全加载,完成?

我应该使用以下WebdriverWait代码来等待页面加载完成吗?

WebDriverWait(self.driver, 10).until(lambda d: d.execute_script('return document.readyState') == 'complete')

如果需要,我的代码应该放在哪一行?

我再次运行我的代码,第二次运行。输出是:

Rows length
16
cols length
6
col_name.text = 
Name
cols length
6
col_name.text = 
Address
cols length
6
col_name.text = 
DOB
...

所以我需要让我的代码更好,所以每次运行我的测试用例时它都能正常工作。 什么是最好的解决方案?

谢谢, 里亚兹

0 个答案:

没有答案