zoukankan      html  css  js  c++  java
  • Selenium2 (python)


     

    包名:selenium

    支持浏览器:Firefox,InternetExplorerDriver,OperaDriver,Chrome(要使用一种浏览器应下载相应的driver驱动)

    firefox: https://github.com/mozilla/geckodriver/releases

    chrome: http://chromedriver.storage.googleapis.com/index.html

    IE: http://selenium-release.storage.googleapis.com/index.html

    一、基本命令

     1 dr = selenium.webdriver.Firefox()  打开浏览器;
     2 dr.maximize_window()              最大化
     3 dr.set_window_size(400,640)        设置浏览器大小;
     4 dr.get("url")               打开网页;
     5 dr.back()                 后退;
     6 dr.forward()               前进;
     7 dr.current_url              获取当前url;
     8 dr.current_window_handle        获得当前窗口;
     9 dr.window_handles              获得所有窗口;
    10 switch_to_window()             在多窗口之间切换;
    11 dr.execute_script()            执行js脚本;
    12 dr.quit()                退出浏览器;

    二、元素定位

    1 dr.find_element_by_id()
    2 dr.find_element_by_name()
    3 dr.find_element_by_class_name()
    4 dr.find_element_by_tag_name()
    5 dr.find_element_by_link_text()
    6 dr.find_element_by_partial_link_text()  
    7 dr.find_element_by_xpath()

    路径示例:"/html/body/div[2]/form/span/input"

    通过id查找:"//input[@id=’input’]"  还可以用and,or进行多个属性联合查找,每个前都需@

    能过上一级目录定位:"//span[@id=’input-container’]/input"

    dr.find_element_by_css_selector()

    三、css元素匹配规则

     1 *            通过元素选择器,匹配任何元素;
     2 E            标签选择器,匹配所有使用E标签的元素;
     3 .info          class选择器,匹配所有class属性中包含info的元素;
     4 #footer        id选择器,匹配所有id属性等于footer的元素;
     5 E,F            多元素选择器,同时匹配所有E或F元素;
     6 E F            后代元素选择器,匹配所有属于E元素后代的F元素;
     7 E>F            子元素选择器,匹配所有E元素的子元素F
     8 E+F            毗邻元素选择器,匹配紧随E元素之后的同级元素F(只匹配第一个)
     9 E~F            同级元素选择器,匹配所有在E元素之后的同级F元素;
    10 E[att='val']     属性att值为val的E元素;
    11 E[att^='val']    属性att值以val开头的E元素;
    12 E[att$='val']    属性att值以val结尾的E元素;
    13 E[att*='val']    属性att值包含val的E元素;
    14 E[att1='v1'][att2='v2']    att1和att2的同时定位;
    15 E:contains('xxxx')内容中包含xxxx的E元素;
    16 E:not(s)          匹配不符合当前选择器的任何元素;
    18 E:nth(n)    在其父元素中的E子元素集合中排在第n+1个E元素(例:css=ul>li:nth(0)) 19 E:eq(n)   同上; 20 E:first   第一个; 21 E:last   最后一个; 22 E:even   偶数位元素; 23 E:odd    奇数位元素; 24 E:lt(n)   前n个元素; 25 E:gt(n)   排在n位之后的元素; 26 E:only-child  父元素的唯一一个子元素且标签为E; 27 E:empty   不包含任何子元素的E元素; 29 find_elements   也可以上各种方法定位元素,主要用于批量操作对象,或者先获取一组对象,然后再从之中选择一个。

    四、对已定位到元素(WebElement)的操作     

    1 click()        单击;
    2 send_keys()    输入;还可发送模拟键盘事件,具体键存于selenium.webdriver.common.keys;
    3 submit()      提交表单;
    4 clear()        清除元素内容;

    WebElement的一些属性:

    1 size            尺寸;
    2 text            元素文本;
    3 get_attribute(name)   返回元素的属性值,可以是id,name,type或元素拥有的其它属性;
    4 is_displayed()        元素是否用户可见;

    五、鼠标操作(ActionChains)常用方法

    1 context_click()             右击;
    2 double_click()               双击;
    3 drag_and_drop(source,target)    拖动;
    4 move_to_element()          悬停在一个元素上;
    5 click_and_hold()           左键点击一个元素且不释放;

    例:ActionChains(driver).context_click(element).perform()     perform()

    六、alert/comfirm/prompt       等弹出框的处理

    使用switch_to.alert()    方法定位到相应的框体;

    然后使用以下方法执行相应的操作:

    1 text      返回文字信息;
    2 accept     确认;
    3 dismiss    取消;
    4 send_keys  输入值;

    七、cookie处理

    1 get_cookies()            获得所有cookie信息;
    2 get_cookie(name)        返回特定name的cookie信息;
    3 add_cookie(cookie_dict)    添加cookie;
    4 delete_cookie(name)       删除指定cookie
    5 delete_all_cookies()      删除所有cookie信息;

    八、补充内容

    常用js脚本:

    1 var q=document.documentElement.scrollTop=0    将滚动条滑到最开始;
    2 $("#tooltip").fadeOut();                隐藏文字信息;
    3 $(arguments[0]).fadeOut()                隐藏按钮;
    4 implicitly_wait()                   超时等待;
    5 switch_to_frame()                   切换主框架;

    层级定位:可在一个find_element后再接一个.find_element,通过不同层级的两个元素来同时确定一个位置。

    上传文件:

    先通过定位打开本地弹出框,然后通过send_keys来传入本地文件路径就可以了;

  • 相关阅读:
    Linq与Lambda,神一般的工作效率
    svn和git孰优孰劣
    关于C++的***5的输出问题
    POJ 3469 Dual Core CPU(最小割)
    HDU 4259 Double Dealing
    最大流Dinic算法
    HDU 4442 Physical Examination(2012年金华赛区现场赛A题)
    int ,long , long long类型的范围
    POJ 1679 The Unique MST(判断最小生成树是否唯一)
    HDU 4280 Island Transport(网络流)
  • 原文地址:https://www.cnblogs.com/aland-1415/p/7396875.html
Copyright © 2011-2022 走看看