• selenium and win32api


    I:Web 测试

    selenium-2.45.0

    python 2.7.8

    win32api http://sourceforge.net/projects/pywin32/files/pywin32/Build%20219/

     1 # -*- coding: cp936 -*-
     2 from selenium import webdriver
     3 from selenium.common.exceptions import NoSuchElementException
     4 from selenium.webdriver.common.keys import Keys
     5 import time,win32api,win32con
     6 
     7 browser = webdriver.Firefox() 
     8 browser.get("http://192.168.1.123/user/login") 
     9 
    10 elem = browser.find_element_by_name("username")
    11 elem.send_keys("databox")
    12 
    13 elem = browser.find_element_by_id("pwd")
    14 elem.send_keys("123456"+Keys.RETURN)
    15 
    16 time.sleep(3)
    17 
    18 elem = browser.find_element_by_class_name("display-name")
    19 elem.click()
    20 
    21 time.sleep(3)
    22 
    23 elem = browser.find_element_by_id("SWFUpload_0")
    24 elem.click()
    25 time.sleep(1)
    26 
    27 win32api.keybd_event(65,0,0,0)
    28 win32api.keybd_event(65,0,win32con.KEYEVENTF_KEYUP,0)
    29 time.sleep(1)
    30 
    31 win32api.keybd_event(13,0,0,0)
    32 win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0)
    33 
    34 
    35 time.sleep(30) 
    36 
    37 browser.close()

    II:接口测试

    #!/usr/bin/python
    #coding=utf-8
    
    import urllib
    import urllib2
    import json
    
    def main():
            #login
        posturl = "http://10.100.120.177/v2/user/login"
        data1 = {'user_slug':'email:zhaohui@qq.com', 'password':'000000', 'captcha':'','auto_login':'false'}
        #p=post(posturl, data)
        req1 = urllib2.Request(posturl)
        data_enc = urllib.urlencode(data1)
        opener = urllib2.build_opener(urllib2.HTTPCookieProcessor())
        response = opener.open(req1, data_enc)
        p=response.read()
        #json
        f=json.loads(p)
        print f.keys()
        #get keys
        sed=f['X-LENOVO-SESS-ID']
        print sed
        #print sed
    
        uid=f['user_id']
        print uid
    
        #post file
        posturlf="http://10.100.120.177/v2/files/databox/mac0.txt"
        datap={'X-LENOVO-SESS-ID':sed,'uid':uid,'overwrite':'true','path_type':'self'}
        req = urllib2.Request(posturlf)
        data = urllib.urlencode(datap)
        response = opener.open(req, data)
        print response
    
    
    if __name__ == '__main__':
        main()

    result:

    [u'status', u'mobile_chk', u'used', u'user_id', u'ctime', u'mobile', u'email_chk', u'from_domain_account', u'quota', u'password_changeable', u'sms_auth', u'X-LENOVO-SESS-ID', u'location', u'photo', u'uid', u'user_slug', u'AT', u'user_name', u'email', u'account_id']
    b552c34d41f6e54538284170e60e24bc
    4717
    <addinfourl at 51174472L whose fp = <socket._fileobject object at 0x000000000307D480>>

    III:键位码 & win32api

    import win32api
    import win32con
    win32api.keybd_event(17,0,0,0)  #ctrl键位码是17
    win32api.keybd_event(86,0,0,0)  #v键位码是86
    win32api.keybd_event(86,0,win32con.KEYEVENTF_KEYUP,0) #释放按键
    win32api.keybd_event(17,0,win32con.KEYEVENTF_KEYUP,0)

    附个键位码表:
    字母和数字键     数字小键盘的键       功能键         其它键 
          键   键码   键   键码     键   键码    键      键码 
          A   65       0   96        F1   112     Backspace    8 
          B   66       1   97        F2   113     Tab       9 
          C   67       2   98        F3   114     Clear      12 
          D   68       3   99        F4   115     Enter      13 
          E   69       4   100       F5   116     Shift      16 
          F   70       5   101       F6   117     Control     17 
          G   71       6   102       F7   118      Alt       18 
          H   72       7   103       F8   119     Caps Lock    20 
          I   73       8   104       F9   120     Esc       27 
          J   74       9   105       F10  121     Spacebar    32 
          K   75       *   106       F11  122     Page Up     33 
          L   76       +   107       F12  123     Page Down    34 
          M   77       Enter 108       --   --      End       35 
          N   78       -   109       --   --       Home      36 
          O   79       .   110       --   --      Left Arrow   37 
          P   80       /   111       --   --      Up Arrow    38 
          Q   81       --   --       --   --      Right Arrow   39 
          R   82       --   --       --   --      Down Arrow    40 
          S   83       --   --       --   --      Insert      45 
          T   84       --   --       --   --      Delete      46 
          U   85       --   --       --   --      Help       47 
          V   86       --   --       --   --      Num Lock     144 
          W   87          
          X   88      
          Y   89      
          Z   90      
          0   48      
          1   49      
          2   50       
          3   51       
          4   52       
          5   53       
          6   54       
          7   55       
          8   56       
          9   57

    这个函数在user32.dll这个库文件里面。我们可以在C:WINDOWSsystem32(XP系统)这个目录下找到这个文件,他是系统自带的。 我们以C#直接调用这个文件中的API为例子来说下怎么进行鼠标操作,首先在我们C#中声明引用,如果是一个基于From的程序,这个声明的位置写在你的From class就可以了 
    [System.Runtime.InteropServices.DllImport("user32")] 
    private static extern int mouse_event(int dwFlags, int dx, int dy, int cButtons, int dwExtraInfo); 

    参数 意义 
    dwFlags Long,下表中标志之一或它们的组合 
    dx,dy Long,根据MOUSEEVENTF_ABSOLUTE标志,指定x,y方向的绝对位置或相对位置 
    cButtons Long,没有使用 
    dwExtraInfo Long,没有使用 

    dwFlags常数 意义 

    const int MOUSEEVENTF_MOVE = 0x0001;      移动鼠标 
    const int MOUSEEVENTF_LEFTDOWN = 0x0002; 模拟鼠标左键按下 
    const int MOUSEEVENTF_LEFTUP = 0x0004; 模拟鼠标左键抬起 
    const int MOUSEEVENTF_RIGHTDOWN = 0x0008; 模拟鼠标右键按下 
    const int MOUSEEVENTF_RIGHTUP = 0x0010; 模拟鼠标右键抬起 
    const int MOUSEEVENTF_MIDDLEDOWN = 0x0020; 模拟鼠标中键按下 
    const int MOUSEEVENTF_MIDDLEUP = 0x0040; 模拟鼠标中键抬起 
    const int MOUSEEVENTF_ABSOLUTE = 0x8000; 标示是否采用绝对坐标 


    程序中我们直接调用mouse_event函数就可以了 
    mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 500, 500, 0, 0); 

    1、这里是鼠标左键按下和松开两个事件的组合即一次单击: 
    mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 ) 

    2、模拟鼠标右键单击事件: 
    mouse_event (MOUSEEVENTF_RIGHTDOWN | MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0 ) 

    3、两次连续的鼠标左键单击事件 构成一次鼠标双击事件: 
    mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 ) 
    mouse_event (MOUSEEVENTF_LEFTDOWN | MOUSEEVENTF_LEFTUP, 0, 0, 0, 0 ) 

    4、使用绝对坐标 
    MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 500, 500, 0, 0 

    需要说明的是,如果没有使用MOUSEEVENTF_ABSOLUTE,函数默认的是相对于鼠标当前位置的点,如果dx,和dy,用0,0表示,这函数认为是当前鼠标所在的点。5、直接设定绝对坐标并单击 
    mouse_event(MOUSEEVENTF_LEFTDOWN, X * 65536 / 1024, Y * 65536 / 768, 0, 0); 
    mouse_event(MOUSEEVENTF_LEFTUP, X * 65536 / 1024, Y * 65536 / 768, 0, 0); 
    其中X,Y分别是你要点击的点的横坐标和纵坐标 

    而键盘模拟用 Keybd_event() 

    Keybd_event能触发一个按键事 件,也就是说回产生一个WM_KEYDOWN或WM_KEYUP消息。当然也可以用产生这两个消息来模拟按键,但是没有直接用这个函数方便。 Keybd_event共有四个参数,第一个为按键的虚拟键值,如回车键为vk_return, tab键为vk_tab。第二个参数为扫描码,一般不用 设置,用0代替就行。第三个参数为选项标志,如果为keydown则置0即可,如果为keyup则设成“KEYEVENTF_KEYUP”,第四个参数

  • 相关阅读:
    leetcode701. Insert into a Binary Search Tree
    leetcode 958. Check Completeness of a Binary Tree 判断是否是完全二叉树 、222. Count Complete Tree Nodes
    leetcode 110. Balanced Binary Tree
    leetcode 104. Maximum Depth of Binary Tree 111. Minimum Depth of Binary Tree
    二叉树
    leetcode 124. Binary Tree Maximum Path Sum 、543. Diameter of Binary Tree(直径)
    5. Longest Palindromic Substring
    128. Longest Consecutive Sequence
    Mac OS下Android Studio的Java not found问题,androidfound
    安卓 AsyncHttpClient
  • 原文地址:https://www.cnblogs.com/eiguleo/p/4203981.html
Copyright © 2020-2023  润新知