51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 3567|回复: 0
打印 上一主题 下一主题

[原创] 程序执行报错,如何进行问题调试?

[复制链接]
  • TA的每日心情
    擦汗
    4 小时前
  • 签到天数: 1047 天

    连续签到: 5 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2021-6-30 10:16:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    很多新手小白对于程序执行报错,不知道怎么debug进行调试。我也是在学习中发现,这个问题比较有参考价值,因为大神对于这种问题都不屑一看。
      因此有相同问题的小伙伴可以看看我这篇文章,参考一下思路。
      代码程序要实现效果:
      测试用例一共2条case,错误的和正确的:
      ·输入错误用户名、密码,登录,弹出提示,验证提示语正确
      ·输入正确用户名、密码,登录,登录成功,验证标题正确

      1.0版本源代码
    1. #导入相关包
    2. from selenium.webdriver.support.wait import WebDriverWait
    3. from selenium.webdriver.support import expected_conditions as EC
    4. from time import sleep, time
    5. from selenium import webdriver
    6. import pytest
    7. from page.BasePage import BasePage
    8. from page.user_login_page import Test_admin_login_page
    9. from Util import util
    10. #类名称
    11. class TestUserLogin(object):
    12. #初始化函数
    13.     def setup_class(self):
    14.         self.driver=webdriver.Chrome()
    15.         self.adminpage= Test_admin_login_page(self.driver)
    16.         self.adminpage.goto_admin_page()
    17.         self.logger=util.get_logger()
    18.         self.logger.info('登录功能')
    19. #配置参数
    20.     login_data=[('wangxin1','123456','账号或密码不正确'),
    21.                 ('wangxin', '123', '卡车调度系统')
    22.     ]
    23. #pytest 调用参数
    24.     @pytest.mark.dependency(name=login_data)
    25.     @pytest.mark.parametrize('username,pwd,expect',login_data)
    26. #实现登录功能
    27.     def test_user_logon_username_pass(self,username,pwd,expect):
    28.         self.logger.debug('输入用户名称:%s ', username)
    29.         self.adminpage.input_username(username)
    30.         self.logger.debug('输入密码:%s',pwd)
    31.         self.adminpage.input_pwd(pwd)
    32.         self.logger.debug('点击登录')
    33.         self.adminpage.input_btn()
    34. #作判断
    35.         if username =='wangxin1':

    36.             WebDriverWait(self.driver,5).until(EC.alert_is_present())
    37.             time.sleep(2)
    38.             alert=self.driver.switch_to.alert
    39.             time.sleep(2)
    40.             assert alert.text==expect
    41.             alert.accept()
    42.             time.sleep(2)
    43.         else:
    44.             WebDriverWait(self.driver,5).until(EC.title_is(expect))
    45.             sleep(3)
    46.             assert self.driver.title==expect

    47.             self.driver.quit()
    48. #调用
    49. if __name__ == '__main__':
    50.     pytest.main()
    复制代码
    运行成功后提示如下:


      实际运行效果是用例都执行了,但是就是结果显示failed。



      于是在感觉出问题的if语句处加了一下断点,一步步调试,点击下面箭头指的下一步。


      执行过程种发现执行if语句后直接转到else语句后面,证明alert语句没执行成功。
      为什么没执行成功呢?发现提示语是一个message而非alert。那有没有可能这块写错了呢?于是重新改写将提示语定位。
    1. WebDriverWait(self.driver,5).until(EC.visibility_of_element_located(toast))
    2. sleep(3)
    3. msg=self.driver.find_element(*toast).text
    4. assert msg == expect
    复制代码
    运行报错:


      说明运行WebDriver wait等待5s钟后没有定位到元素报异常。时间调长一点再调试,仍然报错,其实就是元素未定位到。
           将css定位改为xpah定位,再次运行成功。
    1. WebDriverWait(self.driver,5).until(EC.visibility_of_element_located(toast))

    2. msg=self.driver.find_element(*toast).text
    3. sleep(2)
    4. assert msg == expect
    复制代码

    2.0版本代码
    1. #导入相关包
    2. from selenium.webdriver.support.wait import WebDriverWait
    3. from selenium.webdriver.support import expected_conditions as EC
    4. from time import sleep, time
    5. from selenium import webdriver
    6. import pytest
    7. from page.BasePage import BasePage
    8. from page.user_login_page import Test_admin_login_page
    9. from Util import util
    10. #类名称
    11. class TestUserLogin(object):
    12.   #初始化函数
    13.     def setup_class(self):
    14.         self.driver=webdriver.Chrome()
    15.         self.adminpage= Test_admin_login_page(self.driver)
    16.         self.adminpage.goto_admin_page()
    17.         self.logger=util.get_logger()
    18.         self.logger.info('登录功能')
    19.   #配置参数
    20.     login_data=[('wangxin1','123456','账号或密码不正确'),
    21.                 ('wangxin', '123', '卡车调度系统')
    22.     ]
    23.   #pytest 调用参数
    24.     @pytest.mark.dependency(name=login_data)
    25.     @pytest.mark.parametrize('username,pwd,expect',login_data)
    26.   #实现登录功能
    27.     def test_user_logon_username_pass(self,username,pwd,expect):
    28.         self.logger.debug('输入用户名称:%s ', username)
    29.         self.adminpage.input_username(username)
    30.         self.logger.debug('输入密码:%s',pwd)
    31.         self.adminpage.input_pwd(pwd)
    32.         self.logger.debug('点击登录')
    33.         self.adminpage.input_btn()
    34.     #作判断
    35.         if username =='wangxin1':
    36.             WebDriverWait(self.driver,5).until(EC.visibility_of_element_located(toast))
    37.             msg=self.driver.find_element(*toast).text
    38.             sleep(2)
    39.             assert msg == expect
    40.         else:
    41.             WebDriverWait(self.driver,5).until(EC.title_is(expect))
    42.             sleep(3)
    43.             assert self.driver.title==expect
    44.             self.driver.quit()

    45. if __name__ == '__main__':
    46.     pytest.main()
    复制代码
    总结
      回顾下刚刚写完代码报错却不知道怎么解决的话,处理办法总结如下:
      ·能定位到某个语句的报错,可以看报错信息;
      ·如果没有报错信息,或者报错信息不能区分,Debug运行调试;
      ·Debug调试,应该走的语句没走就能定位这块有问题,比如上面就是提示语提醒我给当作alert定位造成没有定位到。



    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-15 13:34 , Processed in 0.067735 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表