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等安装了。