selenium 问题定期总结

来源:互联网 发布:微信o2o系统源码下载 编辑:程序博客网 时间:2024/06/05 10:21

这些天也写了很多的关于自动化的代码,比以前熟练了,但是也暴露了很多个人问题:粗心大意、浮躁、急脾气,这些都对写代码是很致命的打击和伤害,现在把问题总结如下。

2017.9.24

1.autoIT 工具的使用(可以模拟鼠标和键盘,现在是感觉对于文件上传很有帮助,别的功能还不太会使用)

在写autoIT的过程中也遇到了很多问题,在公司电脑上没有解决,回到自己电脑也没有解决,此时请教了朋友,他的代码和我的一样,但是他的是好的,我的却一直运行不了,此时我又看了看自己的代码,运行了一下,竟然可以了,其实我是一脸懵逼的,到现在还是蒙圈,不懂为什么突然可以运行了。

9.27 更新:公司电脑是英文系统,所以要区分大小写,用autoIT识别出来的是Open,然而我很不仔细的写了open,所以公司电脑一直运行不出来。

家里电脑是中文系统,所以不存在什么大小写的问题。


2.testarea文本框输入文本(可以直接使用.send_keys())

但是我在写代码的过程中,却一直报错:list 没有send_keys的属性,一直很懵逼,百度了很多文档还是没有解决问题,然后看到网上有人说要切frame,但是我看了看我的网页没有frame,就算是有,但是当前的标签不在frame里面,然后就硬拗frame切换,理所当然的失败了,此时又问了朋友,他直接说你是不是多了一个s,当时我还没很懵逼,怎么可能会多一个s,我都是自己打的,不可能,但是事实证明就是我多打了一个s,然后去掉s可以输入。好吧。笨蛋如我。


3.浏览器窗口不会关闭。

测试用例执行完毕,浏览器窗口不会关闭,但是很纳闷,不会关闭,看了下代码貌似是忘记写driver.close()了,然后添加了close()重新执行,还是不能关闭浏览器。试了多次后,可以关闭了,但是这次真的什么都没做,只是重复试了几次而已,好吧,奇怪的selenium,我也很无奈。

9.25  关于执行完测试用例浏览器窗口不会关闭的问题,我写了一个time.sleep(1000),但是其实在Python中 1000是s,不是毫秒,所以等待时间大概17分钟,以至于浏览器一直不能关闭,这种弱智问题,讲真我也很无奈。



2017.10.2

4.断言

今天在写pageobject,然后在封装的登录页面写了self.assertEqual(),然后再测试用例调用登录页面时,一直提示loginpage没有assertEqual这个属性,最后在stackoverfow找到了答案,assertEqual是TestCase类下面的方法,如果想要断言的话 可以直接用assert 即可。


5.元组:传参数(该错误发生于写pageobject,重写find_element方法时)

def find_element(self,*loc):#        return self.driver.find_element(*loc)        try:            #确保元素是可见的。            #注意:以下入参为元组的元素,需要加*。Python存在这种特性,就是将入参放在元组里。#            WebDriverWait(self.driver,10).until(lambda driver: driver.find_element(*loc).is_displayed())            #注意:以下入参本身是元组,不需要加*            WebDriverWait(self.driver,10).until(EC.visibility_of_element_located(loc))            return self.driver.find_element(*loc)        except Exception as e:
    print(e)
在这个表达中我遇到的问题是:我写的是
 WebDriverWait(self.driver,10).until(EC.visibility_of_element_located(*loc)),然后运行系统一直报错说  __init__() takes 2 positional arguments but 3 were given,查阅资料才知道,这种情况下,入参本身就是元祖了,所以不用再加*把它作为元组件传参,所以才会报这个错误。

6. 'NoneType' object has no attribute 'click'

问题出现在pageobject封装过程中,在basepage页面重写了find_element()方法,def find_element(self,*loc):
try:
WebDriverWait(self.driver,10).until(EC.visibility_of_element_located(loc))
return self.driver.find_element(*loc)
except Exception as e:
print(e)

但是之前没有return,然后在后来开始封装click_element()时间,一直报错,没有click这个属性,然后百度了一下发现,这个错误是说 空值没有点击的属性,然后看到有大神说:肯定是在调用此处函数之前,所传递进来的变量,此处的self,由于某种原因,没有获得对应的值,而是空值,所以才出现这样的错误,然后就去看了看自己的代码,确实是没有返回值,所以才会报这个错误,然后把结果return 出来就执行成功了。