其他分享
首页 > 其他分享> > selenium基础操作

selenium基础操作

作者:互联网

1、selenium的介绍

    selenium支持web浏览器的自动化;主要由三个工具构成:    webdriver、IDE、Grid

2、selenium环境配置步骤

    准备好python环境;准备好selenium环境;下载浏览器对应的driver版本;driver配置环境变量;在python中import对应的依赖

3、selenium的安装

    配置好python环境;配置好pip工具;pip install selenium;或者在pycharm直接安装

4、driver的配置

5、python中selenium的使用

    import selenium

    from selenium import webdrver

    def test_selenium():

        driver = webdriver.Chrome()

        driver.get("https://www.baidu.com")

6、用例的关键要素

    导入依赖;创建driver;执行自动化步骤;断言

7、三种等待方式

    直接等待:强制等待,线程休眠一定时间:time.sleep(3);

    隐式等待:设置一个等待时间,轮询查找(默认0.5秒)元素是否出现,如果没出现就抛出异常:self.driver.implicitly_wait(3);

    显式等待:在代码中定义等待条件,当条件发生时才继续执行代码;WebDriverWait 配合 until()和until_not()方法,根据判断条件进行等待;程序每隔一段时间(默认为0.5秒)进行条件判断,如果条件成立,则执行下一步,否则继续等待,直到超过设置的最长时间;

8、XPATH概念及应用

9、CSS的概念及应用

10、Actions

    ActionChains:执行PC端的鼠标点击,双击,右键,拖拽等事件;

    TouchActions:模拟PC和移动端的点击、滑动、拖拽,多点触控等多种手势操作;

11、动作链接ActionChains

    执行原理:调用ActionChains的方法时,不会立即执行,而是将所有的操作,按顺序存放在一个队列里,当你调用perform()方法时,队列中的事件会依次执行;

    基本用法:生成一个动作action = ActionChains(driver);动作添加方法1 action.方法1;动作添加方法2 action.方法2;调用perform()方法执行(action.perform())

    基本写法:链式写法:ActionChains(driver).move_to_element(element).click(element).perform();

    分布写法:actions = ActionChains(driver)

                    actions.move_to_element(element)

                    actions.click(element)

                    actions.perform()

    ActionChains用法1:点击,右键,双击操作

        action = ActionChains(driver)

        action.click(element)

        action.double_click(element)

        action.context_click(element)

        action.perform()

    ActionChains用法2:鼠标移动到某个元素上:

        action = ActionChains(self.driver)

        action.move_to_element(element)

        action.perform()

    ActionChains用法3:模拟按键方法:模拟按键有多种方法,能用win32api来实现,能用SendKeys来实现,也可以用selenium的WebElement对象的send_keys()方法来实现,这里ActionChains类也提供了几个模拟按键的方法;

    Action = ActionChains(driver)

    action.send_keys(Keys.BACK_SPACE)

    action.key_down(Keys.CONTROL).send_keys('a').key_up(Key.CONTROL)

    action.perform()

12、TouchAction

    类似于ActionChains,ActionChains只是针对PC端程序鼠标模拟的一系列操作,对H5页面操作时无效的,TouchAction可以对H5页面操作,通过TouchAction可以实现点击,滑动拖拽,多点触控,以及模拟手势的各种操作;

    手势控制:tap --- 在指定元素上敲击

                    double_tap ---在指定元素上双敲击

                    tap_and_hold --- 在指定元素上点击但不释放

                    move --- 手势移动指定偏移(未释放)

                    release --- 释放手势

                    scroll --- 手势点击并滚动

                    scroll_from_element --- 从某个元素位置开始手势点击并滚动(向下滚动为负数,向上滑动为正数)

                    long_press --- 长按元素   

                    flick --- 手势滑动

                    flick_element --- 从某个元素开始手势滑动(向上滑动为负数,向下滑动为正数)

                    Perform — 执行

13、表单定义

    表单是一个包含表单元素的区域;

    表单元素是允许用户在表单中(比如:文本域、下拉列表、单选框、复选框等)输入信息的元素;

    表单使用表单标签(<form>)定义,比如:<form><input /></form>;

    操作表单元素步骤:

        首先要定位到表单元素;

        然后去操作元素(清空,输入或者点击等)

14、多窗口处理

    点击某些链接,会重新打开一个窗口,对于这种情况,想在新页面上操作,就得先切换窗口;获取窗口的唯一标识用句柄表示,所以只需要切换句柄,就可以在多个页面灵活操作了;

    多窗口处理流程:

        1.先获取到当前的窗口句柄(driver.current_window_handle)

        2.再获取到所有窗口句柄(driver.window_handles)

        3.判断是否是想要操作的窗口,如果是,就可以对窗口进行操作,如果不是,跳转到另外一个窗口,对另一个窗口进行操作(driver.switch_to_window);

15、frame介绍

    frame是HTML中的框架,在HTML中,所谓的框架就是可以在同一个浏览器中显示不止一个页面;

    基于HTML的框架,又分为垂直框架和水平框架(cols,rows)

    frame分类:

        frame标签包含frameset、frame、iframe三种,frameset和普通的标签一样,不会影响正常的定位,可以使用index、id、Neme、webelement任意种方式定位;而frame和iframe对selenium定位而言是一样的,selenium有一组方法对frame进行操作

    多frame切换:

        frame存在两种:嵌套的,未嵌套的;

        切换frame:

            driver.switch_to.frame()    # 根据元素id或者index切换frame

            driver.switch_to.default_content()     # 切换到默认frame

            driver.switch_to.parent_frame()     # 切换到父级frame

        未嵌套切换frame:

            driver.switch_to_frame(“frame 的 id”)

            driver.switch_to_frame(“frame - index”)frame无ID的时候根据索引来处理,索引从0开始driver.switch_to_frame(0)

        嵌套切换frame:

            对于嵌套的先进入到iframe的父节点,再进到子节点,然后就可以对子节点里面的对象进行处理和操作;

            driver.switch_to.frame(“父节点”)

            driver.switch_to.frame(“子节点")

16、js的处理

    selenium能够执行js,这使得selenium拥有更为强大的能力;

    直接使用js操作页面,能解决很多click()不生效的问题;

    js代码:

        document.getElementById("su”)

        window.alert(’selenium弹框测试’)

        a = document.getElementById(‘kw’).value

        document.title

        JSON.stringify(performance.timing)

        document.documentElement.scrollTop=1000

    selenium调用:

        driver.execute_script(“window.alert(’selenium弹框测试’)”)

        driver.execute_script(“a = document.getElementById(‘kw’).value;window.alert(a)”)

        driver.execute_script(“return document.getElementById(‘id’).value”)

    大部分时间控件都是readonly属性,需要手动去选择对应的时间,手工测试中很容易做到,自动化中对控件的操作可以使用Js来操作;

        处理时间控件思路:

        1.取消日期的readonly属性;2.给value赋值;3.写js代码来实现如上的1、2点,再webdriver对js进行处理;

17、文件上传

    input标签可以直接使用send_keys(文件地址)上传文件

    用法:ele = driver.find_element_by_id(‘上传按钮id’)

        ele.send_keys(‘文件路径+文件名’)

18、弹框处理机制

    在页面操作中有时会遇到JavaScript生成的alert、confirm、以及prompt弹框,可以使用Switch_to()方法定位到;然后使用text/accept/send_keys等方法进行操作;

    操作alert常用方法:

        switch_to.alert():获取当前页面上的警告框;

        text:返回文字信息;

        accept():接受现有警告框;

        dismiss():解散现有警告框;

        send_keys(keysToSend):发送文本至警告框;

19、PageObject原则

    参考selenium官方文档;

    原则解读:

        方法意义:用公共方法代表UI所提供的功能;

        方法应该返回其他的PageObject或者返回用于断言的数据;

        同样的行为不同的结果可以建模为不同的方法;

        不要在方法内添加断言;

    字段意义:

        不要暴露页面内部的元素给外部;

        不需要建模UI内的所有元素;

20、复用已有浏览器

    需要退出当前所有的谷歌浏览器;找到chrome的启动路径;配置环境变量;

    启动命令:windows:chrome --remote-debugging-port=9222

    Mac:chrome --remote-debugging-port=9222

    访问http://localhost:9222

21、使用cookie

    driver.get(url)

    driver.delete_all_cookies()

    for cookie in cookies:

        driver.add_cookie(cookie)

    driver.refresh()

    

标签:ActionChains,selenium,frame,driver,element,基础,action,操作
来源: https://blog.csdn.net/qq_44336529/article/details/118490815