python+appium自动化测试-学习过程中踩过的那些坑

一、创建工程虚拟环境问题

(一).工程环境创建

image.png

1.location为工程存储的位置

2.Vietualenv:编译器的虚拟环境

3.New environment using下的Location:虚拟环境存储的位置

4.New environment using下的Base interpreter:基础编译器,即系统安装的python

5.Inherit global site-packages:勾选上的话代表创建的新项目需要copy一份全局包到虚拟环境。

6.Make available to all projects:勾选上,表示,当在虚拟环境下安装包的时候,copy一份到全局。

注意:

全局包存放在python安装目录下的\Lib\site-packages子目录里。

虚拟环境包安装在关联的项目目录下面的${虚拟环境名}\Lib\site-packages子目录里

(二).Project Structure

image.png

介绍上图红色框框中的作用:标识文件

Sources:通过为此类别分配文件夹,您可以告诉IDE编译器此文件夹及其子文件夹包含应作为构建过程的一部分进行编译的源代码。

Excluded:(1) 不会索引该文件夹内的文件, 也就是不再显示indexing
(2)因为不再索引文件夹内的文件, 所以使用全局搜索功能时也不会检查该文件夹内的文件

Templates:模板设置

Resources:适用于您的应用程序中使用的资源文件(图像,各种配置XML和属性文件等)。

二、出现original error could not proxy command to remote server. original error error socket hang up

解决方法:

a.在控制台中输入一下两条命令,再重新安装uiautomator2即可

adb  uninstall io.appium.uiautomator2.server
adb  uninstall io.appium.uiautomator2.server.test

b.重启appium

三、出现Unresolved Attributed Reference,如下图:

image.png

发生原因:

在该类中定义的driver属性为WebDriver(WebDriver库属于Selenium框架),而以上代码中调用的open_notifications()和press_keycode()方法是属于webdriver库(webdriver库属于appium框架),所以需要在该类中导入webdriver类,并在类中将driver声明为webdriver

解决方法:

a.查看open_notifications()方法所在的包有没有在venv→Lib→site-packsges下

b.查看driver是否有定义,在类下定义driver的属性,如下图:

image.png

四、* 传参问题

# 通过ID定位(*表示参数数量不定,无*表示参数数量固定)
a:
    def find_element(self, locator):
        return self.driver.find_element(*locator)
b:
    def find_element_xpath(self, *locator):
        return self.driver.find_element_by_xpath(*locator)

如上例题:
*locator:表示传入的参数数量是不固定的,可以传一个或多个参数
locator:表示传入的参数数量固定为一个

五、Unicode的解码使用gbk解码方式

参数化读取自外部的yaml文件,获取yaml文件例子中,读取yaml文件会出现下图中的问题

编写如下:

search_context_data = yaml.safe_load(open(path, "r"))

会出现如下问题

image.png

问题分析:

错误的意思是:Unicode的解码(Decode)出现错误了,以gbk编码的方式去解码(该字符串变成Unicode),但是此处通过gbk的方式,却无法解码(can't decode).''illegal multibyte sequence"的意思是非法的多字节序列,也就是说无法解码了。

出现这样的错误,可能是要处理的字符串本身不是gbk编码,却是以gbk编码去解码。比如,字符串本身是utf-8的,但用gbk去解码,必然出错。

解决问题:

读取yaml文件时添加一行代码(utf-8)即可,如下:

search_context_data = yaml.safe_load(open(path, "r", encoding= "utf-8"))

六、日志文件输出乱码

使用python的logging模块记录日志,有时会遇到中文编码问题错误。

在logging.FileHandler(path) 中添加指定编码方式 encoding='utf-8' 即可,logging.FileHandler(path, encoding='utf-8') 。

上栗子:

# 借助handle将日志输出到文件中
fh = logging.FileHandler(filename, encoding='utf-8')

你可能感兴趣的:(python+appium自动化测试-学习过程中踩过的那些坑)