我正在使用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
我的桌子停在第一排。 请帮忙, 谢谢, 里亚兹
答案 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。