轻松自动化---selenium-webdriver(python) (一)

来源:互联网 发布:安卓去广告软件 编辑:程序博客网 时间:2024/05/21 19:29


http://www.cnblogs.com/fnng/p/3160606.html



 

为什么选python

之前的菜鸟系列是基于java的,一年没学其实也忘的差不多了,目前所测的产品部分也是python写的,而且团队也在推广python ,其实就测试人员来说,python也相当受欢迎。易学,易用。翻翻各测试招聘,python出现的概率也颇高。

 

平台搭建:

前一篇中已经介绍,如果你也想体验一下自动化魅力,那就赶快搭建自己的环境吧~

selenium + python自动化测试环境搭建

 

第一个脚本:

下面看看python 穿上selenium webdriver 是多么的性感:

复制代码
# coding = utf-8from selenium import webdriverbrowser = webdriver.Firefox()browser.get("http://www.baidu.com")browser.find_element_by_id("kw").send_keys("selenium")browser.find_element_by_id("su").click()browser.quit()
复制代码

怎么样?相信不懂代码的人都能看懂,但还是请容我在这里啰嗦一下每一句的含义:

 

# coding = utf-8

可加可不加,开发人员喜欢加一下,防止乱码嘛。

 

from selenium import webdriver

要想使用seleniumwebdriver 里的函数,首先把包导进来嘛

 

browser = webdriver.Firefox() 

我们需要操控哪个浏览器呢?Firefox ,当然也可以换成Ie 或 Chrome browser可以随便取,但后面要用它操纵各种函数执行。

 

browser.find_element_by_id("kw").send_keys("selenium")

一个控件有若干属性id name、(也可以用其它方式定位),百度输入框的id kw ,我要在输入框里输入 selenium 。多自然语言呀!

 

browser.find_element_by_id("su").click()

搜索的按钮的id su ,我需要点一下按钮( click() )。

 

browser.quit()

退出并关闭窗口的每一个相关的驱动程序,它还有个类似的表弟。

browser.close()

关闭当前窗口 ,用哪个看你的需求了。

 

添加休眠

什么?你说刚才太快没看清浏览器的操作过程。请time出马,让他跑慢点。

 

复制代码
# coding = utf-8from selenium import webdriverimport  time  #调入time函数browser = webdriver.Firefox()browser.get("http://www.baidu.com")time.sleep(0.3)  #休眠0.3秒browser.find_element_by_id("kw").send_keys("selenium")browser.find_element_by_id("su").click()time.sleep(3)  # 休眠3秒browser.quit()
复制代码

 

time.sleep() 函数随意插,哪里太快插哪里,再也不用担心看不清脚本的运行过程了。

 

其实,这个函数的真正用途不是给我们看脚本的运行过程的,有时候网络原因,或页面加载慢。假设搜索框输入框输入了selenium ,搜索按钮还没加载出来,那么脚本就报错。在适当的位置加入time.sleep()有助于减少网络原因造成的脚本执行失败;

 

输出

什么?在运行脚本的时候,上了个厕所,你都不知道刚才的脚本是否运行成功了。把刚才访问页面的title 打印出来。

 

复制代码
# coding = utf-8from selenium import webdriverdriver = webdriver.Chrome()driver.get('http://www.baidu.com')print driver.title  # 把页面title 打印出来driver.quit()
复制代码

 

虽然我没看到脚本的执行过程,但我在执行结果里看到了

>>> 百度一下,你就知道

说明页面正确被我打开了。

 

 

--------------------------

学习更多selenium 内容:

 「功能测试自动化」汇总

 

好文要顶 关注我 收藏该文  
虫师
关注 - 30
粉丝 - 6048
+加关注
5
0
« 上一篇:「UI 测试自动化selenium」汇总
» 下一篇:轻松自动化---selenium-webdriver(python) (二)
ADD YOUR COMMENT

  1. #1楼 bubu_步步  2013-07-17 10:05
       

    很喜欢博主的文章,刚刚用豆约翰博客备份专家备份了您的全部博文。

        
    支持(0)反对(0)
  2. #2楼 qunqun  2013-08-13 13:39
       

    如何搭建selenium+webdriver 环境啊

        
    支持(0)反对(0)
  3. #3楼 花海子  2014-07-09 16:37
       

    browser.find_element_by_id("kw").send_keys("selenium") 这句话运行报如下错误
    selenium.common.exceptions.ElementNotVisibleException: Message: u'Element is not currently visible and so may not be interacted with' ; Stacktrace: 
    请教一下这是什么情况啊? 谢谢

        
    支持(0)反对(0)
  4. #4楼 Free-program  2014-07-15 11:45
       

    @ 花海子
    你得把id改成kw1----自己去定位对象id,别搬代码

        
    支持(0)反对(0)
  5. #5楼 Frankwangyifang  2015-03-27 18:09
       

    @虫师,你好,请问下,如何通过自己写代码来调用Selenium2Library的封装的方法呀?
    比如,我要封装新的Keyword的时候,希望能用到Selenium2Library里的方法(e:Open Browser),要怎么处理呢?
    谢谢!

        
    支持(0)反对(0)
  6. #6楼 林中夕阳  2016-02-01 12:55
       

    browser.quit()关闭浏览器时提示,Plugin container for Firefox已停止工作,什么原因啊,网上的答案都不行

        
    支持(0)反对(0)
  7. #7楼 duck2790  2016-04-13 15:55
       

    请教一下:为什么没次打开Firefox都报错呢?
    if count == 30:
    self.kill()
    raise WebDriverException("Can't load the profile. Profile "
    "Dir: %s If you specified a log_file in the "
    "FirefoxBinary constructor, check it for details."
    % (self.profile.path))
    就是加粗的部分报错了,好像是启动的时候没加载浏览器配置文件。
    我是mac,怎么加载他的配置文件呢?
    跪等回复。

        
    支持(0)反对(0)
  8. #8楼 844649600  2016-07-13 15:17
       

    非常好

        
    支持(0)反对(0)
  9. #9楼 lorie  2016-07-13 17:02
       

    你好,请问输出函数不要加括号吗,不应该是print(driver.title)吗?

        
    支持(0)反对(0)
  10. #10楼 victorlw  2016-07-15 17:58
       

    赞!开始学习,虫师的博客相见恨晚,如果早两年看到就好了。

        
    支持(0)反对(0)
  11. #11楼 twuv  2016-08-18 11:42
       

    @ lorie
    这个是用python 2.x的版本写的,python3.x后变为print()

        
    支持(0)反对(0)
  12. #12楼 twuv  2016-08-18 11:43
       

    @ 虫师 你好,我的报这个错是为什么啊

        
    支持(0)反对(0)
  13. #13楼 twuv  2016-08-18 11:43
       

    Traceback (most recent call last):
    File "E:/Dev_Root/python/how_to_dev_python/WebTest/test1.py", line 5, in <module>
    browser = webdriver.Firefox()
    File "C:\Python27\lib\site-packages\selenium-3.0.0b1-py2.7.egg\selenium\webdriver\firefox\webdriver.py", line 65, in __init__
    self.service.start()
    File "C:\Python27\lib\site-packages\selenium-3.0.0b1-py2.7.egg\selenium\webdriver\common\service.py", line 71, in start
    os.path.basename(self.path), self.start_error_message)
    selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH. 

    Exception AttributeError: "'Service' object has no attribute 'process'" in <bound method Service.__del__ of <selenium.webdriver.firefox.service.Service object at 0x02996C30>> ignored

        
    支持(1)反对(0)
  14. #14楼 还没有  2016-09-18 21:51
       

    你好,看了你的例子。
    from selenium import webdriver

    browser = webdriver.Firefox()
    browser.get('http://www.163.com')
    print(browser.title)
    browser.quit()

    没有任何结果。是不是firefox还要配置什么的
    我改成IE,就出错了
    Traceback (most recent call last):
    File "C:/Users/ty/PycharmProjects/untitled3/src/Reptile.py", line 17, in <module>
    browser = webdriver.Ie()
    File "E:\Python\Python35-32\lib\site-packages\selenium-2.21.2-py3.5.egg\selenium\webdriver\ie\webdriver.py", line 58, in __init__
    desired_capabilities=DesiredCapabilities.INTERNETEXPLORER)
    File "E:\Python\Python35-32\lib\site-packages\selenium-2.21.2-py3.5.egg\selenium\webdriver\remote\webdriver.py", line 60, in __init__
    self.start_session(desired_capabilities, browser_profile)
    File "E:\Python\Python35-32\lib\site-packages\selenium-2.21.2-py3.5.egg\selenium\webdriver\remote\webdriver.py", line 102, in start_session
    'desiredCapabilities': desired_capabilities,
    File "E:\Python\Python35-32\lib\site-packages\selenium-2.21.2-py3.5.egg\selenium\webdriver\remote\webdriver.py", line 151, in execute
    response = self.command_executor.execute(driver_command, params)
    File "E:\Python\Python35-32\lib\site-packages\selenium-2.21.2-py3.5.egg\selenium\webdriver\remote\remote_connection.py", line 283, in execute
    return self._request(url, method=command_info[0], data=data)
    File "E:\Python\Python35-32\lib\site-packages\selenium-2.21.2-py3.5.egg\selenium\webdriver\remote\remote_connection.py", line 324, in _request
    response = opener.open(request)
    File "E:\Python\Python35-32\lib\urllib\request.py", line 464, in open
    req = meth(req)
    File "E:\Python\Python35-32\lib\urllib\request.py", line 1183, in do_request_
    raise TypeError(msg)
    TypeError: POST data should be bytes or an iterable of bytes. It cannot be of type str.

    这是什么原因??

        
    支持(0)反对(0)
  15. #15楼 北倍  2016-11-03 15:08
       

    @ twuv
    我遇到了和你一样的情况,请问你解决了吗?

        
    支持(0)反对(0)
  16. #16楼 多米尼哥  2016-11-16 16:12
       

    @ 北倍
    这是因为在Firefox高版本需要使用 geckodriver 来驱动,不再使用Seleniu默认自带的Firefox webdriver。

    你需要手动下载 geckodriver 并将 其所在的路径设为环境变量即可解决(或者把geckodriver.exe扔到python安装目录下,跟python.exe同级目录)。

        
    支持(0)反对(0)
  17. #17楼 北倍  2016-11-17 17:02
       

    @ 多米尼哥
    谢谢你解答了我的疑惑,我后来用了谷歌,装了chromedriver.

        
    支持(0)反对(0)
  18. #18楼 我是快乐的小黄鸭  2016-12-04 16:56
       

    已精下载了geckodriver放在了C:\Program Files (x86)\Mozilla Firefox 路径下。环境变量:C:\Program Files (x86)\Mozilla Firefox;D:\setup_root\python;
    我的系统是:win 7 64位。firefox也是最新的版本。
    运行脚本时提示:
    [Child 22664] ###!!! ABORT: Aborting on channel error.: file c:/builds/moz2_slave/m-rel-w32-00000000000000000000/build/src/ipc/glue/MessageChannel.cpp, line 2056
    多方查找,没有找到解决方法~~

        
    支持(0)反对(0)
  19. #19楼 我是快乐的小黄鸭  2016-12-04 17:00
       

    补充:python是2.7 版本。
    D:\setup_root\python\python.exe E:/pycharm_code/test/uitest.py
    hello
    'NoneType' object has no attribute 'path'

    Process finished with exit code 0

        
    支持(0)反对(0)
  20. #20楼 哼哼唧唧pl  2016-12-19 13:37
       

    @ lorie
    不用加driver啊

        
    支持(0)反对(0)
  21. #21楼 test_engineer  2017-05-16 20:33
       

    # coding=utf-8
    from selenium import webdriver

    driver = webdriver.Ie()
    driver.get("http://www.baidu.com")

    driver.find_element_by_id("kw").send_keys("Selenium2")
    driver.find_element_by_id("su").click()
    driver.quit()

    代码执行之后,启动了Ie浏览器并获取了百度首页,之后的三行代码没有执行,这是为什么?
    错误提示:
    raceback (most recent call last):
    File "E:\课程\《Python》\code\webdirver\baidu.py", line 9, in <module>
    driver.find_element_by_id("kw").send_keys("Selenium2")
    File "C:\Users\jian\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 285, in find_element_by_id
    return self.find_element(by=By.ID, value=id_)
    File "C:\Users\jian\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 787, in find_element
    'value': value})['value']
    File "C:\Users\jian\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 252, in execute
    self.error_handler.check_response(response)
    File "C:\Users\jian\AppData\Local\Programs\Python\Python35-32\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 194, in check_response
    raise exception_class(message, screen, stacktrace)
    selenium.common.exceptions.NoSuchElementException: Message: Unable to find element with id == kw

        


原创粉丝点击