数据驱动框架下识别不同元素错误信息写入Excel及Selenium条件判断问题
问题原因
- 核心问题出在元素查找逻辑的顺序和异常处理:你在判断条件中优先调用了
find_element_by_xpath查找过期密码才会出现的确认密码框,当处于密码无效场景时,这个元素不存在,find_element会直接抛出NoSuchElementException,直接进入异常捕获分支写入Error,完全不会执行后续的elif密码无效判断逻辑。 - 外层冗余的
or判断也会提前触发元素查找的异常,打断后续逻辑执行。
错误提示界面参考下图:
修复方案
首先新增一个工具方法,安全判断元素是否显示,避免直接抛出异常中断流程:
# 新增安全判断元素是否显示的方法 def is_element_displayed(self, xpath): try: element = self.driver.find_element_by_xpath(xpath) return element.is_displayed() except NoSuchElementException: return False
然后修改原有逻辑,去掉冗余的外层判断,按优先级依次判断两个场景:
else: time.sleep(5) try: # 先判断密码过期场景 if self.is_element_displayed(self.lp.textbox_ConfirmPassword_xpath): self.driver.find_element_by_xpath(self.lp.textbox_ConfirmPassword_xpath).click() print("expired") XLUtils.writeData(self.path, 'Sheet2', r, 6, 'Expired password') # 再判断密码无效场景 elif self.lp.verifyInvalidPasswordIsDisplay() == "Invalid username or password": print("invalid") XLUtils.writeData(self.path, 'Sheet2', r, 3, 'Invalid username or password') # 其他未知错误场景 else: XLUtils.writeData(self.path, 'Sheet2', r, 4, 'Error') print("error") except NoSuchElementException: XLUtils.writeData(self.path, 'Sheet2', r, 4, 'Error') print(self.user) print("login fail") self.driver.close()
优化建议
- 若使用Selenium 4+版本,
find_element_by_xpath方法已废弃,建议替换为self.driver.find_element(By.XPATH, xpath)写法,提前导入from selenium.webdriver.common.by import By即可。 - 固定
sleep(5)的等待方式稳定性差,建议替换为Selenium显式等待,根据元素加载状态判断等待时长,避免网络波动导致的误判。
内容的提问来源于stack exchange,提问作者Sheni
相关产品推荐
相关产品推荐

