最近开始在公司项目上做自动化测试了,但是遇到的问题不少,所以开篇博客做一个报错记录更新:
1、引用pytesseract模块运行报错,报错内容如下:
pytesseract.pytesseract.TesseractError: (1, 'Error opening data file D:\\Python\\Python38\\tesseract-ocr\\eng.traineddata Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata" directory. Failed loading language \'eng\' Tesseract couldn\'t load any languages! Could not initialize tesseract.')
根据翻译,无非就是或让我确定名为“TESSDATA_PREFIX”的环境变量是否设置为"tessdata"目录。
解决方法:
(1)找到安装的tesseract-ocr,然后在下面找到“tessdata”这个文件夹,复制它的路径;
(2)打开环境变量,找到TESSDATA_PREFIX,把上面那个复制的路径粘贴进去并保存。
2、使用time.time()时报错,报错如下:can only concatenate str (not "float") to str
代码如下:
t = time.time()
name = path + '\\' + t + '.png'
print(name)
解决方法:因为t是一个float类型的数据,而这里是一个字符串的拼接,所以需要先把t转换成字符串格式,修改后的代码如下:
name = path + '\\' + str(t) + '.png'
其实这个报错还比较容易遇到,所以在拼接的时候,一定要把非string类型的数据使用str()方法先做一个转化。
3、clear()方法失效
先说一下clear()方法失效的场景:
由于我需要测试不同类型的输入,比如我先在一个输入框元素中输入了字母,验证一下输入内容,然后我要清除它,再输入一串数字。可是就会出现当我输入数字后,显示的输入内容是原来的“字母+数字”的组合,导致断言错误。这个就是因为clear()方法失效了,那么该怎样解决呢?有两种方法:
a.先双击输入框,再重新输入内容;
b.利用js代码找到该元素并置空,要注意的是:js有一个限制,就是不能使用xpath的方式去定位元素
最终,具体的代码如下:
# 最原始的方法:
# ele_1.clear()# 方法一:双击
ActionChains(self.driver).double_click(ele_1).perform()
# 重新输入
ele_1.send_keys("100")# 方法二:万能的js
js = 'document.querySelector(".ant-input-number-input-wrap input").value="";'
self.driver.execute_script(js)
ele_1.send_keys("100")
4、send_keys()方法失效
先说一下出现send_keys()方法失效的场景:
我要新建多个用户,为了避免用户名重复,所以我就用类似于“sxs”+“20200831144045”,也就是我名字缩写加年月日时分秒的一个“yyyyMMddhhmmss”格式去做命名。新建用户成功后,我会利用这个用户名去搜索这个用户,结果在搜索框输入这个比较长的用户名时出问题了,只输入了用户名的一半,导致我搜索到的用户不止一个,这肯定就不符合我的要求了,那么该怎么办呢?同样也是有两种方法:
a.在输入框中输入搜索内容后,清除内容,再次输入内容
b.利用js代码找到该元素并输入内容,要注意的是:js有一个限制,就是不能使用xpath的方式去定位元素
# 第一种方法:输入内容-清空内容-输入内容
locator = (By.CSS_SELECTOR, '.ant-input-affix-wrapper:nth-child(1) > .ant-input')
context = 'sxs20200831144045'
self.find_element(locator).send_keys(context)
self.find_element(locator).clear()
self.find_element(locator).send_keys(context)# 第二种方法:利用js代码输入内容
ele_selector = ".ant-input-affix-wrapper:nth-child(1) > .ant-input"
context = 'sxs20200831144045'
js = 'document.getElementBySelector(' + ele_selector + ').value=' + context
self.driver.execute_script(js)
后续会继续更新,最近太久没跟这块的学习了~