zoukankan      html  css  js  c++  java
  • 神秘的指令链(Action Chains)

    转:http://www.imdsx.cn/index.php/2017/11/22/click/

    最近有很多同学私聊问我,在通过Selenium做UI自动化的时候,明明能够在DOM树内看到这个元素,但是我在通过driver click、sendkey的时候,就是点击不到或无法输入字符串。

    实际上这是由于WEB中某些元素需要通过一系列连贯的操作才能处于可以点击的状态,driver提供的click方法是每次都只执行一个命令操作,而我们需要连贯的操作,这里就要应用Selenium提供的ActionChains模块。

    我们今天就通过查看Selenium ActionChains的源码以及实例来讲解下鼠标悬操作的使用方法。

    Selenium学习环境介绍

    Selenium学习环境中基本覆盖了selenium学习过程中的所有实操内容,如Iframe、switch、alert、ActionChains等...

    本文以下所有操作基于Selenium学习环境进行操作。


    一、什么场景需要我们使用ActionChains模块

    当我们需要连贯操作时,就需要用到ActionChains模块了。

    例:以大师兄搭建的Selenium学习环境为例。(http://ui.imdsx.cn/uitester/

    这种场景时,点击按钮实际是隐藏的,当我们鼠标悬浮在指定位置后,才会将点击按钮的display属性(css中隐藏属性)通过js操作删除掉,当鼠标移出指定位置后,js又会对其增加display属性。

    这时如果你直接获取点击按钮的元素操作,一定是获取不到的,虽然说点击按钮确实存在于DOM树中,但是这个元素是不可见的。Selenium会报selenium.common.exceptions.ElementNotVisibleException: Message: element not visible。(元素不可见异常。)

    当然我们也是可以通过Selenium提供的is_displayed来判断元素是否可见,就可以避免报错出现。


    二、ActionChains模块的原理及源码分析

    导入路径

    ActionChains的原理其实很简单,它实际就是将你要连贯操作的每个指令,追加到一个list中,通过调用一个启动方法,统一执行所有指令,这样就实现了连贯的操作。

    ActionChains源码


    这里ActionChains封装点睛之笔在于,它return本类,可以提供所谓的链式编程了,可以一直点到天荒地老,最后再加一个perform方法调用统一执行,在编写Code的时候就给予我们一种连贯的特征。个人认为非常的精髓。

    三、ActionChains应用,连贯操作问题的落地解决。

    我们既然知道ActionChains了的原理了那么我们来实际写一个例子验证下我们的分析。就以第一部分我们说到的http://ui.imdsx.cn/uitester/,为例。鼠标悬浮指定位置后,点击按钮,弹出ok的alert弹框。


    四、脚本中应用的Api方法介绍


  • 相关阅读:
    element-ui 中Message 消息提示
    MYSQL 常用语法格式
    python 爬取必应每日图片
    linux:文件权限管理
    如何建立自我学习的"触发机制"?
    总有那么一些人,把自己的思想强加给别人
    linux 控制history命令历史记录
    linux apt-get 安装与卸载命令
    ubuntu16.04下 安装java8
    历史与过去是一面镜子,它照到的是你现在的自己
  • 原文地址:https://www.cnblogs.com/shmily2018/p/9278698.html
Copyright © 2011-2022 走看看