您的位置:首页 > 编程语言 > Python开发

使用python3的selenium自动化测试遇到的一些异常提示(一)

2017-12-28 10:23 351 查看
刚开始学习python,用来做自动化测试,遇到问题,作为一个记录

首先介绍一个demo网站http://sahitest.com/demo/

1、 Geckodriver executable needs to be in PATH
geckodriver是一原生态的第三方浏览器,对于selenium3.x版本都会使用geckodriver来驱动firefox,所以需要下载geckodriver.exe。放置在Path 环境变量可以访问到的地方

2、Unable to find a matching set of capabilities
geckodriver、firfox和python版本兼容问题

3、Message: Unable to locate element: [name="username"]
     测试的时候是由于需要等待加载时间,加了一个sleep10秒,就解决了
     -----引申:python三种等待方式
   

4、Message: Element is not visible
定位百度的登录界面,一直提示这个,定位错误,一开始是
browser.find_element_by_xpath('//div[@name="tj_login"]').click()
browser.find_element_by_xpath('//a[@name="tj_login"]').click()
都不行,需要先定位到div块,再进一步定位
browser.find_element_by_xpath('//div[@id="u1"]/a[@name="tj_login"]').click()

5、弹框定位,下面两个语句定位的百度登陆用户名输入框是一样的:
browser.find_element_by_xpath("//div[@id='passport-login-pop-api']/form/p[@id='TANGRAM__PSP_10__userNameWrapper']/input").send_keys("123456")
层级定位,用了二级定位,先定位弹出框,再定位输入框:
div=browser.find_element_by_class_name("tang-content").find_element_by_name("userName") .send_keys("username")

6、alert/confirm/prompt 处理
alert = browser.switch_to.alert()
TypeError: 'Alert' object is not callable
对象不能用函数形式调用,就是不能callable。 此类错误一般是由于内部函数被用作变量名时发生
修改为alert = browser.switch_to.alert即可

7、browser.implicitly_wait(3)
selenium.common.exceptions.WebDriverException: Message: Not a Number
未解决:

8、用WebDriverWait的时候,提示:
没有WebDriverWait模块
解决方法:明确引入的模块
from selenium.webdriver.support.ui import WebDriverWait
element = WebDriverWait(browser,5).until(lambda x:x.find_element_by_xpath('//div[@id="u1"]/a[@name="tj_login"]'))
element.click()

9、使用move_to_element报错
selenium.common.exceptions.WebDriverException: Message: performActions
http://blog.csdn.net/huilan_same/article/details/52305176
未解决

11、下载文件的时候,需要点击按钮弹窗,但是直接完成至Process finished with exit code 0,没有报错,也没有弹窗
原因:click()写成了click,没有写后面的括号,所以什么反应都没有--注意方法的调用

12、下载文件:不报错也不下载
profile = webdriver.FirefoxProfile()
profile.set_preference('browser.download.dir', 'd:\\')
profile.set_preference('browser.download.folderList', 2)
profile.set_preference('browser.download.manager.showWhenStarting', False)
profile.set_preference('browser.helperApps.neverAsk.saveToDisk', 'application/octet-stream')

---这里写成了json,所以没有下载下来
driver = webdriver.Firefox(firefox_profile=profile)

13、火狐的用户配置可以通过about config查看

14、需要调研:
showModalDialog模态对话框,在分配任务的时候,上传文件的窗口是showModalDialog模态对话框,需要转化成openwindow

15、在点击【导入】按钮无法解决后,尝试直接打开上传文件页面的方法,但是又遇到了问题,一开始尝试打开两个窗口用
本来打算先登录driver.get("xxxx";)然后再打开页面
up=webdriver.Firefox()
up.get('hxxxx5')
实际情况是再打开第二个页面的时候,约等于重新启动了一个进程,需要重新登录,解决方法:
直接driver.get('xxx),将原来的页面覆盖了,然后再上传

16、获取标签的属性值,内容,状态
http://blog.csdn.net/xm_csdn/article/details/53390649

17、调用xlrd出错:
TypeError: 'int' object is not callable
原因:rows = table.nrows()这样调用了,应该rows = table.nrows这样调用

18、生成html格式的report,不报错,也不生成报告(htmltestrunner)
有三处错误:

(1)引用unitest的时候,写成了testsuite = unittest.TestCase,应该是testsuite = unittest.TestCase()
(2)改正之后提示“TypeError: 'Module' object is not callable”,原因是以内htmltestrunner模块的时候不明确,有两种使用方式,总结如下:

A。直接引入 from HTMLTestRunner import HTMLTestRunner,调用的时候runner = HTMLTestRunner(stream = 。。。)

B。间接引用,import HTMLTestRunner,调用的时候需要runner = HTMLTestRunner.HTMLTestRunner(stream = 。。。)

(3)这样修改了,在ide里可以运行并生成测试报告,但是在pycharm里不行,原因是Ctrl+Shift+F10运行不会生成脚本,Alt+Shift+F10运行生成脚本

19、Python ConfigParser.NoSectionError: No section:
原因是conf文件没有写绝对路径

20、在使用response = requests.post(op_api,files=param,cookies=newCookie)的时候,提示了一堆接口返回码,原因是之前把参数files写成了data

21、在质检组长分配任务的时候,要根据任务编码查询,定位“任务编码”输入框的时候,一直都是不报错,也不提示错误,后来改成先定位到输入框,做一个click()动作,再sendkeys就可以了
#定位任务编码输入框
driver.find_element_by_id("code").click()
#输入任务编码
driver.find_element_by_id("code").send_keys(var.threecode)

22、调用refresh对页面进行刷新,定位不到元素了,实际上是等待时间太短,页面还没有刷新,可以设置等待时间长一点,同原理同网页跳转之后定位不到网页的title,设置等待时间,就可以定位到新的title
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐