Python--系统首页登录脚本报错原因分析

 1.利用appium+python,执行系统首页自动化登录操作。
 

Python--系统首页登录脚本报错原因分析_第1张图片

2.虽然执行结果的确是显示已经登录到系统,但是日志总是提示错误,如下图所以: 

我想肯定是脚本什么地方有问题,于是粗略分析了一下这段话"selenium.common.exceptions.NoSuchElementException: Message: no such element"
这句话的意思是:当前页面没有这样的元素存在。
百思不得其解的是,我对每个元素单独进行定位操作时,都没有提示错误,莫非是某个元素定位并执行完成后,对后续元素定位有影响,导致某个元素无法正确定位。

3.于是注意力主要集中在用于定位元素这块的代码,一个一个进行排除。 
   当我将用于定位到“登录”按钮的这行代码进行注释时(下图中#模拟点击登录按钮 的下一行代码),发现代码终于不再提示错误。

Python--系统首页登录脚本报错原因分析_第2张图片

但是似乎我又发现了一个奇怪的现象,就是我将登录按钮的点击操作进行了注释,为什么最终的执行结果仍然会登录到系统中。
于是又要关注的重点转移到离登录操作最近的一个步骤——就是获取验证码并输入验证码。
理论上,输入完成验证码,再点登录按钮后,就会登录到系统中。 

4.对代码进行debug调试,断点设置在如下图所示地方:

Python--系统首页登录脚本报错原因分析_第3张图片

 猛然发现使用send_keys(randomcodeTxt)进行验证码输入时,输入的验证码字符串最后居然还带有一个\n,一般\n表示键盘上的回车按钮。这下终于明白了为什么即使注释掉登录按钮的操作,仍然可以登录到系统。这好比人工输入完验证码后直接敲了一下回车键。
 
5.  randomcodeTxt的值来源于,一个专门用于获取图片中验证码的函数的返回值。于是最终将目光锁定在函数identifyingCode() 

Python--系统首页登录脚本报错原因分析_第4张图片

 根据代码debug过程显示,当执行到readline()这个方法时,返回的验证码后面含有一个\n,由于readline()方法是按照行来读取内容,那么自然会带入一个回车字符。于是就需要去掉含有\n的字符串,那么加一行代码strIndet.split('\n')[0],将字符串按照\n进行分割,取list中的第一组元素,那么函数最终自然返回不带\n的验证码了。 

再运行一次代码,去掉登录代码的注释,最终执行结果符合预期,也没有错误提示出现。 

你可能感兴趣的:(Python--系统首页登录脚本报错原因分析)