2014-03-04笔记


jenkins & selenium grid

最近主要在弄jenkins相关的东西,包括selenium grid。jenkins有selenium grid的插件,实际执行相当于在jenkins的服务器上运行selenium grid的hub(可以认为是master)。使用selenium grid和原先直接使用selenium区别不大,比如原先是

from selenium import webdriver

driver = webdriver.Firefox()

现在就变成远程的方式

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

driver = webdriver.Remote(
   command_executor='http://127.0.0.1:4444/wd/hub',
   desired_capabilities=DesiredCapabilities.FIREFOX)

组成grid的方式也很简单,hub用类似下面的方法启动

java -jar selenium-server-standalone-2.40.0.jar -role hub

node(可以认为是slave)使用如下方式启动

java -jar selenium-server-standalone-2.40.0.jar -role node -hub http://hub_ip:4444/grid/register

默认hub的端口是4444。组成selenium grid时需要注意,虽然是node指定hub的URL,但是hub也需要能够访问node。更具体一点,如果你的node是virtualbox中的xp,那么网络不能直接使用NAT,至少要使用端口转发或者bridged network。如果使用了NAT,那么虚拟机中的XP获得是内网地址,hub无法直接访问到node导致无法执行selenium指令。端口转发的话把你的虚拟机的某个端口,比如默认node的5555端口映射到宿主机的5555上,其次启动node时需要指定注册的host和port,命令可能就要变成这样

java -jar selenium-server-standalone-2.40.0.jar -role node -host host_machine_ip -port 5555 -hub http://hub_ip:4444/grid/register

这样的问题在于如果有多个虚拟机的话,是无法同时映射到宿主机的5555端口上的,所以与其这样,还不如直接把虚拟机当做真实机器从宿主机连接网络时的DHCP服务器上获取和宿主机在同一网段的IP,那样hub就能直接访问到node了,而且不用关心这个node是不是虚拟机。

到现在为止,个人搭建了宿主机是ubuntu,提供linux下的firefox和chrome,虚拟机是xp,提供ie6,firefox的环境(win32下的chrome还没安装,理论上没啥问题)

搭建好selenium grid后,在ie下执行selenium指令的时候个人发现一个问题:第一次使用IE之后,第二次使用IE会没有反应。其他表现是任务管理器中有多个IEDriver的进程,感觉是在IE下执行时没有清理干净。经过一番google,个人大致知道了原因。如果你尝试在IE下测试的话,建议每次末尾记得都要写上这句,包括出错时:

driver.quit()

每次测试使用quit清理资源,这样就不会出现“阻塞”的现象了。

编译synergy

这个算是长久以来编译安装的一个特例,以及提醒我以后编译安装之前必须看README。
实际是这样的,synergy的编译安装和一般的不同,虽然源代码目录下有个./configure,但是你似乎无法使用这个configure配置成功,你必须按照README或者synergy的wiki上的方式编译:

./hm.sh conf -g1
./hm.sh build

而且,编译好之后,源代码目录下会有一个bin目录,里面的二进制文件直接可运行,貌似不用make install等安装了。