Selenium Python迭代它在第一行停止的行表

时间:2016-02-23 15:16:57

标签: python python-2.7 selenium selenium-webdriver

我正在使用Selenium Python迭代一个行表。在GUI上我删除了表中的项目。在我的脚本中,我正在检查该项目是否不在那里验证它已被删除。 当我遍历我的表时,它停在第一行。它直到最后一行才会继续。

E.g。我将一个Name参数传递给我的方法。我想迭代整个行表,第1列,并检查名称不在那里。如果名称不存在,则返回true。

我的代码段是:

def is_data_objet_deleted(self, name):
    # Params : name : the name of the data object, e.g. Name, Address, Phone, DOB
     try:
        #WebDriverWait(self.driver, 20).until(EC.presence_of_element_located((By.ID, 'data_configuration_data_objects_ct_fields_body')))
        table_id = WebDriverWait(self.driver, 20).until(EC.presence_of_element_located((By.ID, 'data_configuration_data_objects_ct_fields_body')))
        rows = table_id.find_elements(By.TAG_NAME, "tr")
        for row in rows:
            # Get the columns
            col_name = row.find_elements(By.TAG_NAME, "td")[1]  # This is the Checkbox column
            col_name = row.find_elements(By.TAG_NAME, "td")[2]  # This is the Name column
            print "col_name.text = "
            print col_name.text
            if (col_name.text != name):
                return True
            #return False
     except NoSuchElementException, e:
        print "Element not found "
        print e
        self.save_screenshot("data_objects_page_saved_details")
        return False

我的桌子停在第一排。 请帮忙, 谢谢, 里亚兹

2 个答案:

答案 0 :(得分:2)

我只想使用all()

def is_data_objet_deleted(self, name):
    table = WebDriverWait(self.driver, 20).until(EC.presence_of_element_located((By.ID, 'data_configuration_data_objects_ct_fields_body')))
    rows = table_id.find_elements(By.TAG_NAME, "tr")

    result = all(row.find_elements(By.TAG_NAME, "td")[2].text != name
                 for row in rows)

    # save a screenshot if there was name found
    if not result:
        self.save_screenshot("data_objects_page_saved_details")
    return result

基本上,如果所有名称都不等于True,则会返回name,换句话说,如果True不存在,则返回name

作为旁注,您正在处理NoSuchElementException,但它永远不会被try块中使用的任何方法抛出 - 如果没有元素匹配,find_elements()会返回一个空列表找到了一个定位器。

答案 1 :(得分:2)

如果该行没有包含该文本,您将告诉它在第一行停止。

要解决此问题,请更改此信息:

for row in rows:
    ...
    if (col_name.text != name):
        return True

对此:

for row in rows:
    ...
    if (col_name.text == name):
        return False
return True

您希望查看每一行,直到找到您要查找的项目为止。如果找到它,该函数应返回False。如果您在循环中完成整个操作而不返回False,那么您要查找的项目不在表格中,您应该返回True。