程序执行报错,如何进行问题调试?

发表于:2021-6-29 09:45

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:桃子    来源:51Testing软件测试网原创

  很多新手小白对于程序执行报错,不知道怎么debug进行调试。我也是在学习中发现,这个问题比较有参考价值,因为大神对于这种问题都不屑一看。
  因此有相同问题的小伙伴可以看看我这篇文章,参考一下思路。
  代码程序要实现效果:
  测试用例一共2条case,错误的和正确的:
  ·输入错误用户名、密码,登录,弹出提示,验证提示语正确
  ·输入正确用户名、密码,登录,登录成功,验证标题正确

  1.0版本源代码
#导入相关包
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleep, time
from selenium import webdriver
import pytest
from page.BasePage import BasePage
from page.user_login_page import Test_admin_login_page
from Util import util
#类名称
class TestUserLogin(object):
#初始化函数
    def setup_class(self):
        self.driver=webdriver.Chrome()
        self.adminpage= Test_admin_login_page(self.driver)
        self.adminpage.goto_admin_page()
        self.logger=util.get_logger()
        self.logger.info('登录功能')
#配置参数
    login_data=[('wangxin1','123456','账号或密码不正确'),
                ('wangxin', '123', '卡车调度系统')
    ]
#pytest 调用参数
    @pytest.mark.dependency(name=login_data)
    @pytest.mark.parametrize('username,pwd,expect',login_data)
#实现登录功能
    def test_user_logon_username_pass(self,username,pwd,expect):
        self.logger.debug('输入用户名称:%s ', username)
        self.adminpage.input_username(username)
        self.logger.debug('输入密码:%s',pwd)
        self.adminpage.input_pwd(pwd)
        self.logger.debug('点击登录')
        self.adminpage.input_btn()
#作判断
        if username =='wangxin1':

            WebDriverWait(self.driver,5).until(EC.alert_is_present())
            time.sleep(2)
            alert=self.driver.switch_to.alert
            time.sleep(2)
            assert alert.text==expect
            alert.accept()
            time.sleep(2)
        else:
            WebDriverWait(self.driver,5).until(EC.title_is(expect))
            sleep(3)
            assert self.driver.title==expect

            self.driver.quit()
#调用
if __name__ == '__main__':
    pytest.main()

  运行成功后提示如下:

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

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

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

  运行报错:

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

msg=self.driver.find_element(*toast).text
sleep(2)
assert msg == expect

  2.0版本代码
#导入相关包
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleep, time
from selenium import webdriver
import pytest
from page.BasePage import BasePage
from page.user_login_page import Test_admin_login_page
from Util import util
#类名称
class TestUserLogin(object):
  #初始化函数
    def setup_class(self):
        self.driver=webdriver.Chrome()
        self.adminpage= Test_admin_login_page(self.driver)
        self.adminpage.goto_admin_page()
        self.logger=util.get_logger()
        self.logger.info('登录功能')
  #配置参数
    login_data=[('wangxin1','123456','账号或密码不正确'),
                ('wangxin', '123', '卡车调度系统')
    ]
  #pytest 调用参数
    @pytest.mark.dependency(name=login_data)
    @pytest.mark.parametrize('username,pwd,expect',login_data)
  #实现登录功能
    def test_user_logon_username_pass(self,username,pwd,expect):
        self.logger.debug('输入用户名称:%s ', username)
        self.adminpage.input_username(username)
        self.logger.debug('输入密码:%s',pwd)
        self.adminpage.input_pwd(pwd)
        self.logger.debug('点击登录')
        self.adminpage.input_btn()
    #作判断
        if username =='wangxin1':
            WebDriverWait(self.driver,5).until(EC.visibility_of_element_located(toast))
            msg=self.driver.find_element(*toast).text
            sleep(2)
            assert msg == expect
        else:
            WebDriverWait(self.driver,5).until(EC.title_is(expect))
            sleep(3)
            assert self.driver.title==expect
            self.driver.quit()

if __name__ == '__main__':
    pytest.main()

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

      版权声明:本文出自51Testing会员投稿,51Testing软件测试网及相关内容提供者拥有内容的全部版权,未经明确的书面许可,任何人或单位不得对本网站内容复制、转载或进行镜像,否则将追究法律责任。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号