zoukankan      html  css  js  c++  java
  • web自动化的一些基础知识

    selenium 原理

    就是通过webdriver 给浏览器的驱动发送命令,打开浏览器,建立http通信请求 然后通过发送各种命令让浏览器
    进而执行各种操作

    xpath 语法

    #xpath定位总结:
    '''
    nodename 选取此节点的所有子节点。
    / 从根节点选取。绝对定位
    // 从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。 相对定位
    . 选取当前节点。
    .. 选取当前节点的父节点。
    @ 选取属性。
    * 通配符。匹配所有元素节点
    @* 通配符。匹配元素的所有属性
    '''
    '''
    轴运算:
    ancestor:祖先结点 包括父
    parent:父结点
    preceding: 当前元素节点标签之前的所有结点。(html页面先后顺序)
    例://div//table//td//preceding::td
    preceding-sibling: 当前元素节点标签之前的所有兄弟结点
    following: 当前元素节点标签之后的所有结点。(html页面先后顺序)
    following-sibling:当前元素节点标签之后的所有兄弟结点
    '''
    '''
    函数使用:
    text():元素的text内容 例://*[@id="XXX"]//p[text()="XXXX"]
    contains(属性/text(),value):包含函数。例:contains(@class,"XXXX")、contains(text(),"XXXX")
    '''
    '''
    逻辑运算:
    and 表示条件与。
    or 表示条件或。
    例://div[@class="XXX" and contains(@style,"display:visibility")]
    '''

    4. driver.close() 关闭浏览器当前的窗口
    5. driver.quite() 退出浏览器
    6. driver.back()返回前一页面
    7. driver.forward() 前进
    8.driver.refresh() 刷新
    9. driver.title() 获取窗口标题
    10。 driver.current_url 获取url
    driver.current_window_handle 获取当前窗口的句柄 身份证id

    对文本元素的四种基本操作
    1. driver.fin.......get_attribute("value") 获取元素的属性值
    2. driver.fin.......text 获取元素的文本
    3. .click() 点击操作
    4. sendkeys() 输入操作

    常用页面操作3

    等待方式
    1. time.sleep()

    2.智能等待

    隐式等待 implicitly_wait(秒) 设置等待时长,在这个时间内加载完成,则执行下一步
    添加一次就行,全局通用

    3.显性等待
    WebDriverWait类
    WebDriverWait(driver,等待时长,轮循周期默认值0.5秒).until(判断条件)/until_not() 直到这个条件不成立

    4. expected_conditions模块:提供了一系列期望发生的条件
    presence_of_element_located(里面是个元祖(by.跟定位方式,"表达式")):元素存在
    visibility_of_element_located:元素可见
    element_to_be_clickable:元素可点击

    使用之前需要导入的库
    from selenium.webdriver.support.wait import WebDriverWait
    from selenium.webdriver.support import expected_conditions as EC
    from selenium.webdriver.common.by import By

    窗口切换
    1.获取当前所有的窗口
    windows =driver.window_handles 得到是一个list 取值 -1得到当前的窗口,因为当前的窗口一定是你最后打开的那个窗口
    取值 0 切换到第一个窗口
    2.driver.current_window_handle 获取当前窗口的句柄

    3. Ec.new_window_is_opened(+获取到的窗口句柄)
    这个函数可以判断有没有新窗口出现

    driver.switch_to.window(windows[-1]) 进行窗口的切换
    如果新窗口出现就进行切换
    这种方式更保险些

    iframe切换

    1.首先要判断下是否在iframe里面,如果在才需要进行切换
    driver.switch_to.frame()参数可以是 name index webelement

    2.退出iframe 回到默认的html页面
    driver.switch_to.default_content() 直接回到顶层
    如果iframe 有多层嵌套只能一个个切换
    driver.switch_to.parent_frame() 切换到上一级iframe

    方式二 进行iframe 的切换

    EC.frame_to_be_available_and_switch_to_it()
    里面的参数可以是 name id 的属性名,还可以是一个元祖 (By.xxx,"定位方式的属性") ,还可以是一个webelenment
    跟等待配合使用 并进行ifram 的切换

    alert弹窗

    switch_to.alert 切换到alert弹框 跟confirm 弹窗

    alert() 这个方法有返回值
    .text 获取他的文本
    .accept() 接受这个弹窗 弹窗就会消失,关闭
    .dismiss() 拒绝这个弹框
    .sendkeys() 如果有输入的地方还可以输入

    EC.alert_is_present() 里面不需要参数 alert弹窗可见

    然后切换到弹窗

    进行处理

    对下拉列表进行处理
    select option
    selenium 提供了 select类来处理select option
    引入类
    from selenium.webdriver.support.ui import Select
    Select 类有初始化函数,需要传入一个select标签的对象,然后才能调用里面的方法

    1、通过下标选择 select_by_index(index) 索引从0开始
    2、通过value属性select_by_value(value值)
    3、通过文本内容select_by_visible_text(文本内容)

    执行js 使用js 定位页面元素

    js = '里面写js代码'
    driver.execute.script(js)

    滚动条操作
    1. 先找到元素
    element = driver.findxxxxxxx.
    2.再讲元素拖动到可见区域
    driver.execute_script('arguments[0].scorlllntoView();',element) 这个函数的参数有两个,一个是js脚本,还可以传一个web对象

    arguments[0] 这样写就可以取到这个 element这个参数 然后执行scorlllntoView() 操作,把这个元素拖到可见区域

    3. 在操作元素

    element.xxxx()

    百度搜索

     参考:


    @classmethod
    用例前置:setUpClass(cls)
    就是整个类只执行一次,针对的是一个类 使用@classmethod 装饰器

    @classmethod
    用力后置:tearDownClass(cls)

    setUp()、tearDown()、针对的是每个测试用例,一个测试用例会执行一次

    浏览器快捷键:

    ctrl +f  查找元素

    ctrl+shift+c   悬浮框里卖弄的元素显示。

    python不同版本pip的使用

    py -版本吧号  -m pip install  ...

    py -3.6 -m pip install -i http://pypi.douban.com/simple --trusted-host pypi.douban.com airtest

  • 相关阅读:
    Cannot change version of project facet Dynamic web module to 3.0
    mybatis
    mybatis逆向工程工具
    mybatis和jdbc分析
    分析mybatis和jdbc的作用,已经原理
    JDBC使用步骤
    MyBatis架构设计及源代码分析系列(一):MyBatis架构
    MyBatis的foreach语句详解
    vue.js使用elemnetUi
    vue.js路由嵌套传参
  • 原文地址:https://www.cnblogs.com/666666pingzi/p/10520483.html
Copyright © 2011-2022 走看看