zoukankan      html  css  js  c++  java
  • 自动化测试-----WebDriver API

    一、从定位元素开始
    WebDriver提供了八种元素定位方法:
    1、id 2、name 3、class name 4、tag name 5、link text 6、partial link text 7、XPath 8、css selector 在Python语言中,对应的定位方法如下:
    find_element_by_id()
    find_element_by_name()
    find_element_by_class_name()
    find_element_by_tag_name()
    find_element_by_link_text()
    find_element_by_partial_link_text() 有些文本链接会很长,可以取文本链接的一部分定位
    find_element_by_xpath()
    find_element_by_css_selector()

    XPath定位
    1)XPath可以通过 写出元素的绝对路径,即:绝对地址
    2)XPath也可通过元素属性值来定位
    find_element_by_xpath(“//input[@ id =’kw’]”)
    //表示当前页面某个目录下,input表示定位元素的标签名,[@ id=’kw‘]表示这个元素的id属性值等于kw
    3)XPath也可通过层级与属性相结合
    4)XPath也可通过逻辑运算符连接多个属性来查找元素

    CSS定位
    1)通过CSS属性定位: .(点号)表示通过class属性来定位元素
    2)通过id属性定位:(#)井号表示通过id属性来定位元素
    3)通过标签名定位 :如: input
    4)通过父子关系定位
    find_element_by_css_selector(“span>input”) 表示有父亲元素,它的标签名为span,查找它的所有标签名叫input的子元素
    5)通过属性定位:
    find_element_by_css_selector(“[autocomplete=off]”)
    6)组合定位
    XPath与CSS定位方式对比

    定位XPathCSS
    标签 //div div
    By id //div[@id=’eleid’] div #eleid
    By class //div[@class=’eleclass’] div.eleclass
    By属性 //div[@title=’move mouse here’] div[title=move mouse here] div[title^=move] div[title$=here] div[title*=mouse]
    定位子元素 //div[@id=’eleid’]/* //div/h1 div#eleid>* div>h1

    二、控制浏览器
    一)控制浏览器大小
    WebDriver提供了set_window_size()方法来设置浏览器大小
    浏览器在全屏模式下,可以使用maximize_window()方法使打开的浏览器全屏显示,其用法与set_window_size()相同,但它不需要参数

    from selenium import webdriver
    from time import *
    driver=webdriver.Firefox()
    driver.get("https://www.baidu.com/")
    print("设置浏览器宽480,高800显示")
    driver.set_window_size(480,800)
    sleep(5)
    driver.maximize_window()
    sleep(5)
    driver.quit()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    二) 控制浏览器的前进与后退
    WebDriver提供back( )和forward()方法来模拟后退和前进按钮

    from selenium import webdriver
    from time import *
    driver=webdriver.Firefox()
    first_url='https://www.baidu.com/'
    print("now access %s"%first_url)
    driver.get(first_url)
    
    second_url='http://news.baidu.com/'
    print("now access %s"%second_url)
    driver.get(second_url)
    
    driver.back()
    print("now access %s"%first_url)
    sleep(5)
    
    driver.forward()
    print("now access %s"%second_url)
    sleep(5)
    
    driver.quit()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    运行结果:
    这里写图片描述

    三)控制浏览器刷新
    在使用浏览器浏览网页时,浏览器需要刷新来浏览最新的数据,可以手动刷新(F5)页面,WebDriver提供对应refresh()方法来模拟刷新。

    from selenium import webdriver
    from time import *
    driver=webdriver.Firefox()
    
    first_url='https://www.baidu.com/'
    print("now access %s"%first_url)
    driver.get(first_url)
    
    second_url='http://news.baidu.com/'
    print("now access %s"%second_url)
    driver.get(second_url)
    
    driver.back()
    print("now access %s"%first_url)
    sleep(5)
    
    driver.forward()
    print("now access %s"%second_url)
    sleep(5)
    
    driver.refresh()
    sleep(5)
    
    driver.quit()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    三、简单元素操作
    定位元素后,需要对该元素进行操作或单击(按钮)或输入(输入框),WebDriver中常用的方法:
    clear() :清除文本
    send_keys(* value) : 模拟按键输入
    click():单击元素

    一)126邮箱登陆方式

    from selenium import webdriver
    from time import *
    driver=webdriver.Firefox()
    
    first_url='https://mail.126.com/'
    driver.get(first_url)
    
    
    driver.switch_to_frame("x-URS-iframe")
    driver.find_element_by_xpath("//input[@class='j-inputtext dlemail']").clear()
    driver.find_element_by_xpath("//input[@class='j-inputtext dlemail']").send_keys("输入具体用户名")
    
    driver.find_element_by_xpath("//input[@class='j-inputtext dlpwd']").clear()
    driver.find_element_by_xpath("//input[@class='j-inputtext dlpwd']").send_keys("输入对应的密码")
    
    driver.find_element_by_id("dologin").click()
    
    sleep(5)
    driver.quit()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    二)WebElement 接口常用方法
    通常需要与页面交互的方法都由WebElement接口提供,包括上面的8中定位方法和刚才的3中方法。除此之外,WebElement还提供了如下方法:
    submit() 用于提交表单。如:在搜索框输入关键字之后的“回车”操作,就可以通过submit()方法模拟。

    from selenium import webdriver
    from time import *
    driver=webdriver.Firefox()
    
    first_url='http://www.youdao.com/'
    driver.get(first_url)
    
    driver.find_element_by_id("translateContent").send_keys("hello")
    driver.find_element_by_xpath("//*[@id='form']/button").submit()
    
    sleep(5)
    driver.quit()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    size :返回元素的尺寸
    text:获取元素的文本
    get_attribute(name):获取属性值
    is_displayed():判断该元素是否用户可见

    from selenium import webdriver
    from time import *
    driver=webdriver.Firefox()
    
    driver.get("https://www.baidu.com/")
    size=driver.find_element_by_id("kw").size
    print(size)
    
    text=driver.find_element_by_id("cp").text
    print(text)
    
    result=driver.find_element_by_id("kw").is_displayed()
    print(result)
    
    sleep(5)
    driver.quit()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    四、鼠标事件
    ActionChains类提供了鼠标操作的常用方法:
    click(on_element=None)——–单击鼠标左键
    click_and_hold(on_element=None)——–单击鼠标左键,不松开
    context_click(on_element=None)——–单击鼠标右键
    double_click(on_element=None)——–双击鼠标左键
    drag_and_drop(on_element=None)——–拖拽到 某个元素后松开
    drag_and_drop_by_offset(source,xoffset,yoffset)——–拖拽到 某个坐标后 松开
    move_by_offset(xoffset,yoffset)——–鼠标从当前位置移动到某个坐标
    move_to_element(to_element)——–鼠标移动到某个元素
    drag_and_drop_by_offset(source,xoffset,yoffset)——–拖拽到 某个坐标后 松开
    move_to_element_with_offset(to_element,xoffset,yoffset)——–移动到距离某个元素(左上角坐标)多少距离的位置
    perform()——–执行链中的所有动作
    release(on_element=None)——–在某个元素位置松开鼠标左键
    send_keys(*keys_to_send)——–发送某个键到当前焦点的元素
    send_keys_to_element(element,*keys_to_send)——–发送某个键到指定元素

    一)鼠标右击操作
    假如:目标网址:http://sahitest.com/demo/clicks.htm

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from time import *
    driver=webdriver.Firefox()
    
    driver.get("http://sahitest.com/demo/clicks.htm")
    driver.implicitly_wait(10)
    
    rightclick_btn=driver.find_element_by_xpath("html/body/form/input[4]")
    
    ActionChains(driver).context_click(rightclick_btn).perform()
    print(driver.find_element_by_name("t2").get_attribute("value"))
    
    sleep(5)
    driver.quit()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    二)鼠标悬停与移动
    鼠标悬停弹出下拉菜单也是一个十分常见的功能设计
    move_to_element()方法可以模拟鼠标悬停的动作,其用法与context_click()相同

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from time import *
    driver=webdriver.Firefox()
    
    driver.get("http://sahitest.com/demo/clicks.htm")
    driver.implicitly_wait(10)
    
    rightclick_btn=driver.find_element_by_xpath("html/body/form/input[4]")
    
    ActionChains(driver).move_to_element(rightclick_btn).perform()
    
    sleep(5)
    driver.quit()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    假如:目标网址:http://sahitest.com/demo/mouseover.htm

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from time import *
    driver=webdriver.Firefox()
    
    driver.get("http://sahitest.com/demo/mouseover.htm")
    driver.implicitly_wait(10)
    driver.maximize_window()
    
    write=driver.find_element_by_xpath("html/body/form/input[1]")
    
    blank=driver.find_element_by_xpath("html/body/form/input[2]")
    
    result=driver.find_element_by_name("t1")
    
    action=ActionChains(driver)
    
    action.move_to_element(write).perform()
    print(result.get_attribute("value"))
    sleep(5)
    
    #action.move_to_element(blank).perform()
    action.move_by_offset(10,50).perform()
    print(result.get_attribute("value"))
    sleep(5)
    
    action.move_to_element_with_offset(blank,10,-40).perform()
    print(result.get_attribute("value"))
    
    sleep(5)
    driver.quit()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    三)鼠标双击操作
    double_click()方法用于模拟鼠标双击操作。
    目标网址:http://sahitest.com/demo/clicks.htm

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from time import *
    driver=webdriver.Firefox()
    
    driver.get("http://sahitest.com/demo/clicks.htm")
    driver.implicitly_wait(10)
    driver.maximize_window()
    
    doubleclick_btn=driver.find_element_by_xpath("html/body/form/input[2]")
    action=ActionChains(driver)
    action.double_click(doubleclick_btn).perform()
    print(driver.find_element_by_name("t2").get_attribute("value"))
    
    sleep(5)
    driver.quit()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    四)鼠标拖放操作
    drag_and_drop(source,target)在源元素上按住鼠标左键,然后移动到目标元素上释放。
    source:鼠标拖动的源元素
    target:鼠标释放的目标元素
    目标网址:http://sahitest.com/demo/dragDropMooTools.htm

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from time import *
    driver=webdriver.Chrome()
    
    driver.get("http://sahitest.com/demo/dragDropMooTools.htm")
    driver.implicitly_wait(10)
    #driver.maximize_window()
    
    dragger=driver.find_element_by_id("dragger")
    
    item1=driver.find_element_by_xpath("html/body/div[2]")
    
    item2=driver.find_element_by_xpath("html/body/div[3]")
    
    item3=driver.find_element_by_xpath("html/body/div[4]")
    
    item4=driver.find_element_by_xpath("html/body/div[5]")
    
    action=ActionChains(driver)
    action.drag_and_drop(dragger,item1).perform()
    sleep(5)
    
    action.click_and_hold(dragger).release(item2).perform()
    sleep(5)
    
    action.drag_and_drop_by_offset(dragger,300,150).perform()
    sleep(5)
    
    action.click_and_hold(dragger).move_by_offset(400,100).perform()
    sleep(5)
    
    driver.quit()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33

    五、键盘事件
    Keys()类提供了键盘上几乎所有按键的方法,前面,send_keys()可以用来模拟键盘输入,除此之外,还可以用它来输入键盘上的按键,甚至是组合键
    key_down(value,element=None)———-按下某个键盘上的键
    key_up(value,element=None)———-松开某个键
    常用的键盘操作:
    send_keys(Keys.BACK_SPACE) ——删除键(backspace)
    send_keys(Keys.SPACE)———— 空格键(space)
    send_keys(Keys.TAB) ———-制表键(Tab)
    send_keys(Keys.ESCAPE)———-回退键(esc)
    send_keys(Keys.ENTER) ———回车键(enter)
    send_keys(Keys.CONTROL,’a’)———–全选(ctrl+A)
    send_keys(Keys.CONTROL,’c’)—————复制(ctrl+C)
    send_keys(Keys.CONTROL,’x’)——–剪切(ctrl+X)
    send_keys(Keys.CONTROL,’v’)—————粘贴(ctrl+V)
    send_keys(Keys.F1)—————键盘F1
    ……..
    send_keys(Keys.F12)———— 键盘F12

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.keys import Keys
    from time import *
    driver=webdriver.Firefox()
    
    driver.get("https://www.baidu.com")
    driver.implicitly_wait(10)
    
    driver.find_element_by_id("kw").send_keys("seleniumm")
    sleep(5)
    
    driver.find_element_by_id("kw").send_keys(Keys.BACK_SPACE)
    sleep(5)
    
    driver.find_element_by_id("kw").send_keys(Keys.SPACE)
    sleep(5)
    
    driver.find_element_by_id("kw").send_keys("教程")
    sleep(5)
    
    driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"a")
    sleep(5)
    
    driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"x")
    sleep(5)
    
    driver.find_element_by_id("kw").send_keys(Keys.CONTROL,"v")
    sleep(5)
    
    driver.find_element_by_id("kw").send_keys(Keys.ENTER)
    sleep(5)
    
    driver.quit()
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    目标网址:http://sahitest.com/demo/keypress.htm

    from selenium import webdriver
    from selenium.webdriver.common.action_chains import ActionChains
    from selenium.webdriver.common.keys import Keys
    from time import *
    driver=webdriver.Firefox()
    
    driver.get("http://sahitest.com/demo/keypress.htm")
    driver.implicitly_wait(10)
    driver.maximize_window()
    action=ActionChains(driver)
    
    key_up_radio=driver.find_element_by_id("r1")
    key_down_radio=driver.find_element_by_id("r2")
    key_press_radio=driver.find_element_by_id("r3")
    enter=driver.find_element_by_xpath("html/body/form/input[2]")
    result=driver.find_element_by_xpath("html/body/form/input[1]")
    
    key_down_radio.click()
    action.key_down(Keys.CONTROL,enter).key_up(Keys.CONTROL,enter).perform()
    print(result.get_attribute("value"))
    sleep(5)
    
    key_up_radio.click()
    enter.click()
    action.key_down(Keys.SHIFT).key_up(Keys.SHIFT).perform()
    print(result.get_attribute('value'))
    sleep(5)
    
    key_press_radio.click()
    action.send_keys("a").perform()
    print(result.get_attribute('value'))
    sleep(5)
    
    driver.quit()
  • 相关阅读:
    这里有20位程序员关于求职的疑惑,还好也有参考答案
    非科班小白如何逆袭,成功跨考985软件工程?!
    springmvc之RequestMapping中的请求参数和请求头
    springmvc之RequestMapping中的请求方式
    springmvc之RequestMapping注解既可以修饰类也可以修饰方法
    springmvc之第一个springmvc程序
    python之列表推导和生成器表达式
    python之容器序列和扁平序列
    python之利用魔术方法实现自己定义的二维向量
    spring之整合struts2
  • 原文地址:https://www.cnblogs.com/LWK5100/p/14231509.html
Copyright © 2011-2022 走看看