遍历表:避免过时元素异常(Webdriver - Python)

软件测试 网络驱动程序 Python
2022-01-22 19:58:10

这是一个有趣的问题(或者至少我认为是这样) 作为管理员,我有一个包含 N 个条目的表(51 给出一个数字)。一行中的每个条目都是一个招聘人员姓名,并带有指向该人“登录”的链接。我希望能够单击每个招聘人员“登录”,将我带到该帐户,在那里验证一些事实,注销,以管理员身份重新登录并继续循环(以招聘人员身份登录,验证,注销等)我在通过查找每一行然后每个单元格来查找表格。find_elements_by_tag_name("tr")后跟find_elements_by_tag_name("td"))。

当我以招聘人员的身份注销并以管理员的身份重新登录时,问题就出现了,现在我之前发现的单元格抛出了一个陈旧的元素异常。

for row in rows: 
    if chk == "true":
          cells[6].find_element_by_link_text("Login").click()  # recruiter login
          alert = driver.switch_to_alert()
          alert.accept()
          #Verify Recruiter account is the same as the one you logged in as
          driver.find_element_by_link_text("Logout").click()
          self.login()   #admin login
          self.bringUpRecruiters()

我可以调用在每次迭代中查找行和列的函数。但是,webdriver 在每次迭代时需要半分钟才能找到所有单元格元素(51 行 x 7 列)。51 次迭代大约需要 25 分钟。如果行数增加,它只会增加更多。

有没有更优雅、更省时的方法呢?我会很感激你的好主意!

我正在使用 Webdriver + Python 绑定。

1个回答

我想知道使用 Xpaths 专门搜索感兴趣的行中的单元格是否会更快,而不是获取所有行然后操作您感兴趣的一行。我不流利地使用 Python,所以我将说明我的建议在伪代码中:

for i in 1..51
  condition_xpath = "//table/tr[" + i + "]/td[1]"
  column1 = driver.find_element_by_xpath(condition_xpath)
  if condition in column 1 is true
    login_xpath = "//table/tr[" + i + "]/td[7]/a"
    driver.find_element_by_xpath(login_xpath).click()
    alert = driver.switch_to_alert()
    alert.accept()
    #Verify Recruiter account is the same as the one you logged in as
    driver.find_element_by_link_text("Logout").click()
    self.login()   #admin login
    self.bringUpRecruiters()
  end if
end for