51Testing软件测试论坛

标题: 关于selenium webdriver监听用户行为的问题 [打印本页]

作者: 封天禁    时间: 2015-12-24 10:09
标题: 关于selenium webdriver监听用户行为的问题
曾经的selenium ide通过ff 插件可以录制用户的行为。而今selenium webdriver的listener只做到监听本身程序发送命令的过程。起初觉得selenium能启动浏览器,所以有种想法能通过此会话监听到用户的点击,但事实上对用户一切行为无法捕捉。有没有人有办法用selenium或者用别的开源软件做到可编程式的捕捉用户在页面上点击的各种行为或者事件
作者: 土土的豆豆    时间: 2015-12-24 13:34
开源框架就是要你自己去写脚本/程序/甚至搞成型自动化工具去实现DIY要求,所以,开始自己写起来吧~
作者: 封天禁    时间: 2015-12-24 13:56
这是捕捉程序发出命令的监听
public class EventHandler implements WebDriverEventListener{

        public void afterChangeValueOf(WebElement arg0, WebDriver arg1) {
                // TODO Auto-generated method stub

                System.out.println("inside method afterChangeValueOf on " + arg0.toString());
        }

        public void afterClickOn(WebElement arg0, WebDriver arg1) {
                // TODO Auto-generated method stub
                System.out.println("inside method afterClickOn on " + arg0.toString());
        }

        public void afterFindBy(By arg0, WebElement arg1, WebDriver arg2) {
                // TODO Auto-generated method stub
                System.out.println("Find happened on " + arg1.toString()
                                + " Using method " + arg0.toString());
        }

        public void afterNavigateBack(WebDriver arg0) {
                // TODO Auto-generated method stub

                System.out.println("Inside the after navigateback to " + arg0.getCurrentUrl());
        }

        public void afterNavigateForward(WebDriver arg0) {
                // TODO Auto-generated method stub
                System.out.println("Inside the afterNavigateForward to " + arg0.getCurrentUrl());
        }

        public void afterNavigateTo(String arg0, WebDriver arg1) {
                // TODO Auto-generated method stub
                System.out.println("Inside the afterNavigateTo to " + arg0);
        }

        public void afterScript(String arg0, WebDriver arg1) {
                // TODO Auto-generated method stub
                System.out.println("Inside the afterScript to, Script is " + arg0);
        }

        public void beforeChangeValueOf(WebElement arg0, WebDriver arg1) {
                // TODO Auto-generated method stub

                System.out.println("Inside the beforeChangeValueOf method");
        }

        public void beforeClickOn(WebElement arg0, WebDriver arg1) {
                // TODO Auto-generated method stub
                System.out.println("About to click on the " + arg0.toString());

        }

        public void beforeFindBy(By arg0, WebElement arg1, WebDriver arg2) {
                // TODO Auto-generated method stub
                System.out.println("Just before finding element " + arg1.toString());

        }

        public void beforeNavigateBack(WebDriver arg0) {
                // TODO Auto-generated method stub
                System.out.println("Just before beforeNavigateBack " + arg0.getCurrentUrl());

        }

        public void beforeNavigateForward(WebDriver arg0) {
                // TODO Auto-generated method stub
                System.out.println("Just before beforeNavigateForward " + arg0.getCurrentUrl());

        }

        public void beforeNavigateTo(String arg0, WebDriver arg1) {
                // TODO Auto-generated method stub
                System.out.println("Just before beforeNavigateTo " + arg0);
        }

        public void beforeScript(String arg0, WebDriver arg1) {
                // TODO Auto-generated method stub
                System.out.println("Just before beforeScript " + arg0);
        }

        public void onException(Throwable arg0, WebDriver arg1) {
                // TODO Auto-generated method stub
                System.out.println("Exception occured at " + arg0.getMessage());

        }

}


public class Test {

        /**
         * @param args
         * @throws MalformedURLException
         */
        public static void main(String[] args) throws MalformedURLException {
                System.setProperty("webdriver.firefox.bin", "D:\\Program Files (x86)\\Mozilla Firefox\\firefox.exe");
                WebDriver driver = new FirefoxDriver();
                EventFiringWebDriver eventDriver = new EventFiringWebDriver(driver);
                EventHandler handler = new EventHandler();
                eventDriver.register(handler);
                eventDriver.get("http://www.baidu.com/");
        }

}




作者: 封天禁    时间: 2015-12-24 14:22
土土的豆豆 发表于 2015-12-24 13:34
开源框架就是要你自己去写脚本/程序/甚至搞成型自动化工具去实现DIY要求,所以,开始自己写起来吧~

是的,我现在要的是有个代理模式的框架。所以我想找个能绕过浏览器那种沙箱安全机制的代理框架,不是那种需要用浏览器本身插件嵌进去的那种(比如selenium ide 需要装firefox插件)。
作者: 封天禁    时间: 2015-12-24 14:59
附老外提出相似的问题

作者: 封天禁    时间: 2015-12-29 09:08
这帖就这样搁浅了。
作者: huazihui    时间: 2015-12-29 09:23
kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
作者: zzhengjian    时间: 2016-1-9 18:49
封天禁 发表于 2015-12-24 14:22
是的,我现在要的是有个代理模式的框架。所以我想找个能绕过浏览器那种沙箱安全机制的代理框架,不是那种 ...

seleniumIDE的录制功能(抓鼠标键盘事件),seleniumRC的代理绕过沙箱机制,webdriver的API,三者你结合起来就可以做到你的录制工具了。不过说的轻松,看懂源码就要耗费大量的精力。
我一直觉得公司内部做录制工具投入产出比有点不划算,反而你多培训下员工写写自动化脚本就上手快多了,毕竟又不需要他们写框架,简单脚本还是可以速成的。

我倒是基于火狐做过类似QTP的抓取对象的对象库管理工具,当然我是改了firefoxdriver驱动。你用代理的话可以试试把seleniumIDE的js全注入咯,然后抓取鼠标点击元素和键盘事件应该就好了,不是一个小工程,慎重,哈哈。
作者: 封天禁    时间: 2016-2-3 08:42
zzhengjian 发表于 2016-1-9 18:49
seleniumIDE的录制功能(抓鼠标键盘事件),seleniumRC的代理绕过沙箱机制,webdriver的API,三者你结合 ...

其实也不是划算不划算的问题了。。。我们的自动化针对selenium已经做了个可配置的,不用写脚本的界面系统。而今剩下录制这个功能,因为浏览器的沙箱隔离机制,导致到现在也就看到firefox这种开源浏览器才可被selenium嵌入。而类似IE这种浏览器,微软基本不太可能开放源码,就连qtp也是对IE做了一堆本地嵌入的dll。事实上,selenium 的核心现在也好像没更新了,在想这个框架是不是被终止在selenium 2版本了。




欢迎光临 51Testing软件测试论坛 (http://bbs.51testing.com/) Powered by Discuz! X3.2