• 【Selenium课程】


    1、delenium定义:
    用程序控制自动化浏览器的一个工具

    2、selenium2与selenium3差别:
    前者selenium公司自己写的webDriver模块
    后者浏览器公司自己出的webDriver模块

    3、selenium Grid:
    可以在多台机器上同时执行Selenium自动测试

    4、selenium IDE使用时机:
    (1)利用它来生成自动化脚本的大体流程;
    (2)利用Selenium IDE里面的按钮帮助定位元素;

    5、查找元素一般分两种:
    webDriver—全html中查找
    webElement-范围中查找

    6、html
    html DOM(页面渲染引擎或叫浏览器内核)
    DOM是W3C制定的标准,由一个个的node(节点)组成<a>称作一个element(元素)
    CSS
    W3C的CSS是定义html页面样式的语言,决定元素显示的效果
    xpath
    在xml文档中选择node(节点)

    7、通过属性查找:

    id(唯一标识)-
    driver.find_element_by_id('值')

    获得属性的值:ele.print(ele.get_attribute('href'))
    name-
    driver.find_element_by_name('值')【返第一个namewebelement对象】
    driver.find_elements_by_name('值')【返所有符合对象list】
    class-
    driver.find_element_by_class_name('值')【返第一个namewebelement对象】
    driver.find_elements_by_class_name('值')【返所有符合对象list】
    tag-
    driver.find_element_by_tag_name(‘元素头')【返第一个namewebelement对象】
    driver.find_elements_by_tag_name('元素头')【返所有符合对象list】
    链接文本-
    driver.find_element_by_link_text(u"值")【匹配查找】
    driver.find_elements_by_partial_link_text(u"值")【关键字查找】

    8、通过css查找:

    driver.find_element_by_css_selector("css elector")
    ["css elector"="#id值 元素排头.class值"]

    (1)根据tag名字

    p{color:red;}

    (2)根据id,id=‘food’元素

    #food{color:red;}

    (3)根据class,class=‘vegetable’

    .vegetable{color:red;}

    (4)根据tag名和class组合写(如果多个)

    span.vegetable{color:red;}

    [span.vegetable]查找span中,class=‘vegetable’的元素

    [span  .vegetable]查找span下,子元素tag名中class=‘vegetable’的元素

    span.vegetabale#ok 查找span,class=‘vegetabale’且id = ‘ok’的元素

    (5)后代元素与子元素

    【li em】-tag包li下的tag包名em(隔很多代用空格)

    【li>em】-tag包li下一级的tag报名em(隔一代用>)

    查找-不好找的CSS elector,打开F12选中元素,鼠标右键copy=>copy seletor
    测试-F12切换console界面,输入$$("css elector")

    (6)组(group)选择

    [1]组选择同时选择多个元素,逗号隔开

    语法<s1>,<s2>(lg:#food,.cheese)

    [2]组合使用

    选择id为food的所有span子元素和所有的p(包含非food的子元素)

    #food >span,p

    选择id为food的所有span子元素和所有的p子元素

    #food >span,#food>p

    选择id为food的所有子元素

    #food >*

    (7)兄弟元素选择

    选择紧接在另一个元素后的元素,二者有相同的父元素

    #food + div(获取后面的兄弟元素)

    #food +div+p(获取后面的后面的兄弟元素)

    #food > div >p.special + p(选择在另一个元素后的元素,二者有相同的父元素)

    #food ~ div(获取后面的兄弟,不管第几个兄弟)

    (8)属性选择

    可以根据元素的属性及属性值来选择元素

    *[style]

    p[spec=len2]

    p[spec='len2 len3']

    p[spec*='len2']#包含

    p[spec^='len2']#开头结尾

    p[spec$='len2']#以什么什么结尾

    p[class=special][name=p1]#同时满足多个属性值

    (9)伪类

    #food>p:nth-child(n)[注意n为tag包food名下第几个元素]

    #food>p:nth-of-type(n)[注意n为tag包food名下第几个p元件元素]

    (10)找到一个输入框,清楚默认的提示文字

    webelement.clear()

    webelement.text(text两个标签中的文本)

    9、通过Xpath查找:

    Xpath(XML Path Language)

    (1)和css一样,xpath也有通配符*

    //div/* 选择div下面所有的元素

    等价与css $$('div > *')

    (2)根据属性选择

    //*[@style] 选择所有元素类型下的属性

    //*[@id = 'food']

    //p[@style]选择p元素类型下的属性

    (3)子元素选择器

    //div[@style]/p[2]选择老王的第二个女儿娶

    选择属于其父元素的第N个某个类型的子元素

    //*[@style]/p[1]等价于#food >p:nth-of-style(1)

    选择属于其父元素的倒数第N个某个类型的子

    //span[last()-1]  属于其父元素的倒数第二个span【注释:下标是从1开始的】

    //*[@id="food"]/span[last()]

    //*[last()-1] 所有元素中倒数第二个子元素

    (4)现在只能选择前几个或后几个,不能选区域

    //select/*[position()=2]现在第二个元素

    //select/*[position()>=2]第二个及其后面的元素

    //select/*[position()=last()]最后一个元素

    (5)循环选择元素

    xpath = “//select/*[%s]”%i,将position()值设定为一个变量,利用循环可实现选中带入奇偶个元素

    (6)组选择

    用多个表达式一起css用,隔开比如:p,button

    xpath用|隔开,比如//p|//button

    (7)兄弟节点

    //div[@id="food"]/following-sibling::div————相当与css中的#food ~ div

    //div[@id="food"]/following-sibling::div[2]————相邻的第二个

    (8)查找拥有id元素上一级元素的内容]

    ele = driver.find_element_by_xpath("//span[@id='beff']/..")
    print(ele.text.split('#')[1])

    //..//..上级的上级

     (9)不适用与webelement里寻找规则

    webelement.find_element_by_xpath('//p')——依旧是全局查找

    webelement.find_element_by_xpath('./p')——webelement下寻找

    (10)某个元素的值等于什么什么

    /tr[contains(@id,'ticket')]

    10、通过Javascript查找:

    kw = driver.execute_script("return $('kw')[0]")
    kw.send_keys(u'松勤 ')

    11、web元素操作:

    (1)innerText-DOM节点的属性
    element = driver.find_element_by_id("div1")
    print()element.text)
    (2)编辑框输入字符
    ele.send_keys(u'值')
    (3)等待web元素的出现
    方法1、
    import time
    time.wait(1)
    方法2、显式
    方法3、隐式
    [参考书本146页]
    (4)单选框

    webelement = driver.find_element_by_css_selector(''input[value=male]")

    webelement.click()

    (5)多选框

    webelement.is_selected()——返回值为true或false,以此来判定是否选中

    (6)复选框

    from selenium.webdriver.support.ui import Select——导入select类

    select = Select(driver.find_element_by_id(''multi))——实例化webelement对象,具有对应方法

    select.deselect_all()——取消所有选中

    select.select_by_visibnle_text('雅阁')——选中雅阁

    select.deselect_by_visibnle_text('雅阁')——取消选中雅阁

    [参看书本147~150页]
    (7)点击按钮、链接
    driver.find_element_by_id("submit").click()
    (7)获取当前窗口title
    driver.title
    (8)获取当前窗口的地址栏url地址
    driver.current_url
    (9)关闭当前窗口
    driver.close()
    driver.quit()-关闭web浏览器和webdriver
    (10)截屏
    *driver.get_screenshot_as_file("d:/ssl.png")——有路径保存在对应路径下,无路径保存在当前目录下

    *webelement找到对应的元素,然后再进行

    webelement.screenshot('button.png')

     (11)获取tag对应的属性值

    job.get_attribute('class')[job为对应的namewebelement对象]

    (12)切换webdriver控制的窗口

    循环遍历driver.window_handles

    driver.switch_to.window(handle)方法切入新窗口

    检查该窗口特点,是否为要切入的那个

    main_handle = driver.current_window_handle 记录初始网页界面,方便后续切回

    (13)close方法

    close关闭的一个窗口,quit关闭浏览器

    1、在frame、iframe里面操作:
    driver.swithch_to.frame('baidu')【进】(id与name或索引数值0等)
    driver.swithch_to.default_conteent()【出】
    2、在window之间切换:
    [参看书本153~154页]

    3、等待元素出现:

    隐式等待-driver.implicitly_wait(10)【注:全局调用,找不到每隔0.5s会再次找一次】

    driver.implicitly_wait(60)
    ele1 = driver.find_element_by_id('1')
    driver.implicitly_wait(10)

    现式等待-

    4、console中搜索

    $$——css的搜索

    $x——xpath的搜索

    抄袭别人总结的键盘按钮

        send_keys(Keys.BACK_SPACE)                   删除键

        send_keys(Keys.SPACE)                              空格键

        send_keys(Keys.TAB)                                   制表键

        send_keys(Keys.ESPACE)                            回退键

        send_keys(Keys.ENTER)                              回车键

        send_keys(Keys.CONTROL,'a')                     全选

        send_keys(Keys.CONTROL,'c')                     复制

        send_keys(Keys.CONTROL,'x')                     剪切

        send_keys(Keys.CONTROL,'v')                     粘贴

        send_keys(Keys.F1)  

    1、对话框

    (1)driver.switch_to.alert.accept()——alert对话框——切换到对应对话框界面,仅包含确定(F12定位不到)

    (2)driver.switch_to.alert.dismiss()——confirm对话框——点击取消

    (3)driver.switch_to.alert.send_keys('dsgfs')——prompt对话框——相对向前多了输入框

    (4)——其他按钮对话框——

    (5)driver.switch_to.alert.text——读取对话框中的提示信息

    (6)driver.switch_to.alert.clear()——无该中方法

    (7)F12-console中输入:setTimeout(function(){debugger},3000)来实现临时冻结会消失的tips

    (8)最后一次作业解决鼠标悬停,网上查找

    2、上传文件的操作

    (1)练习网站(https://tinypng.com)

    (2)安装使用

    pip install pypiwin32

    import win32com.client

    shell = win32com.clint.Dispatch("wScript.Shell")

    (3)刷新、前往、后退

    driver.refresh()

    driver.forward()

    driver.back()

    1、dos界面批量关闭进程

    taskkill /?

    taskkill /f /im chromedriver.exe 

    2、

    try:

      a

    except:#异常后执行

      print(traceback.format_exc())#打印对象信息

    finally:#无论是否异常,均会执行

      driver.quit()

    3、特殊动作,鼠标选中元素,可执行其他操作

    ac = ActionChains(driver)

    ac1 = ac.click(t1)

    ac2 = ac1.send_keys('1').click(t2).send_keys('2').click(t3).perform#调用会返回本身

    4、页面元素不可见——改变窗口大小、移window动界面

    size = driver.get_window_size()

    driver.set_window_size(800,size['height'])

    driver.maximize_window()

    (conslose界面模拟js代码移动操作)window.scrollBy(0,5000)

    searchbox = driver.find _element_by_tag_name('id')

    for i in range(10):

      driver.execute_script('window.scrollBy(0,220)')

      time.sleep(0.5)

    searchbox.send_keys('你好啊 ')

    5、前端代码动态

    6、合理使用半自动化

    (1)图形界面自动化的难度是比较大的:模拟难、检查难

    (2)用半自动化的方法:

    难自动化的操作,都提示(beep)让人去做

    import winsound

    winsound.Beep(1500,3000)声音频率、声音时间

    其余部分:自动化 去做

    自动化的目的-提高测试效率

    若有错误或建议,敬请联系勘正! 创建者:万骨枯 联系QQ:964942913 地址:四川成都
  • 相关阅读:
    Python 自动化测试实战训练营,由浅入深,从小白到测试高手!
    接口测试 Mock 实战(二) | 结合 jq 完成批量化的手工 Mock
    从文科生转行测试,再到大厂测试开发工程师,我是如何做到的?
    严正声明|严厉打击盗版侵权、非法销售「霍格沃兹测试学院」课程的违法行为
    「金羽毛」有奖征文 | 记录测试开发技术进阶之路的点滴
    测试工程师职业发展漫谈
    Workshop 深圳站|实战+源码架构剖析带你揭开Appium的神秘面纱
    那些难改的 Bug,最后都怎样了?
    BAT大厂都在用的Docker。学会这三招,面试、工作轻松hold住
    2021 开年学习送福利,助力测试进阶提升!
  • 原文地址:https://www.cnblogs.com/wanguku/p/10529698.html
Copyright © 2020-2023  润新知