selenium自动化测试自动点击优惠卷问题

selenium自动化测试自动点击优惠卷问题
问题:XXXXXXX优惠卷自动点击,发现在点击优惠卷后,会弹出一个对话框进行交互,但是selenium无法扑捉到这个弹出对话框。针对上述问题解决尝试过程如下:
1、安装了eclipse
2、安装了jre6
3、安装了python(安装了easy_install)
4、在cmd中输入easy_install selenium 安装了selenium
5、sikuli官方网站下载了sikuliX(for windows)
6、在cmd中输入easy_install sikuli 安装了sikuli(
6.1没有成功,提示需要pyjunis
6.2但是安装pyjunis时提示错误TypeError object of type NoneType has no len()
********************最后放弃了6的路径
7、发现sikuliwebdriver看简介是用firefoxwebdirver开发的尝试,环境配置还不成功
********************放弃7
8、安装robot framework
8.1下载资源:
1.python 2.7
http://www.python.org/download/
http://www.python.org/ftp/python/2.7.3/python-2.7.3.msi
2.wxPython
http://www.wxpython.org/download.php http://downloads.sourceforge.net/wxpython/wxPython2.8-win32-unicode-2.8.12.1-py27.exe
3.robot framework
http://code.google.com/p/robotframework/downloads/list http://robotframework.googlecode.com/files/robotframework-2.7.1.win32.exe
robotframework-2.7.1.jar 2.7.1: Standalone JAR distribution (contains Jython) Featured Mar 26 Mar 26 15.2 MB 502 
robotframework-2.7.1.win32.exe 2.7.1: Graphical installer for 32bit Windows Featured Mar 26 Mar 26 699 KB 1145 
robotframework-userguide-2.7.1.zip 2.7.1: User Guide (also available online) Featured 
robotframework-quickstart-20090113.zip 
4.robot framework ride
https://github.com/robotframework/RIDE/downloads https://github.com/downloads/robotframework/RIDE/robotframework-ride-0.44.win32.exe
5.robot framework seleniumlibrary
https://github.com/rtomac/robotframework-selenium2library/downloads https://github.com/downloads/rtomac/robotframework-selenium2library/robotframework-selenium2library-1.0.0.win32.exe https://github.com/downloads/rtomac/robotframework-selenium2library/robotframework-selenium2library-1.0.0-demo.zip -------------------------------------------------------------------------------------------------
8.2 安装jpython
   如果你需要使用Java开发拓展测试类库,则必须安装Jython
Jython和python的区别可见下文:http://developer.51cto.com/art/200907/136978.htm安装Jython需要XXXXXXXk5或以上,可以在命令行模式下用 Java -version 指令查看JAVA的版本。如果机子上没有,可以自己去Java的官网下载安装
XXXXXXXK1.6官方下载_XXXXXXXK6官方下载地址:http://www.java.net/download/XXXXXXXk6/6u10/promoted/b32/binaries/XXXXXXXk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.exe
Jython的下载页面是如下链接:
http://www.jython.org/downloads.html
选择2.5.2及以上版本下载。
安装很简单:在命令行模式下,进入下载好的jar包目录运行下面指令
java -jar jython_installer-2.5.2.jar 
8.3 安装RobotFramework
cmd中运行easy_install robotframework
8.4 下载robotfremoteserver
https://pypi.python.org/pypi/robotremoteserver
8.5 配置
3、配置rf远程调用sikuli环境:
a、新建一个文件夹c:\rf_sikuli
b、将sikuli安装目录下的C:\Program Files\Sikuli X\sikuli-script.jar拷贝到c:\rf_sikuli下
c、下载文件http://robotframework.googlecode.com/hg/tools/remoteserver/robotremoteserver.py到c:\rf_sikuli中
d、在c:\rf_sikuli下新建文件SikuliRemoteLibrary.py,文件内容如下:
[python] view plaincopyprint?
import sys    
from robotremoteserver import RobotRemoteServer    
from org.sikuli.script import *    

class SikuliRemoteLibrary:    

def __init__(self):    
self.SS = Screen()    
self.PT = Pattern()    

def _wait(self, imgFile, timeOut, similarity):    
try:    
self.PT = Pattern(imgFile)    
self.PT = self.PT.similar(float(similarity))    
self.SS.wait(self.PT, float(timeOut))    
except FindFailed, err:    
print "ERR: _wait"    
raise AssertionError(err)    

def click_object(self, imgFile, timeOut, similarity):    
try:    
self._wait(imgFile, timeOut, similarity)    
self.SS.click(imgFile)    
except FindFailed, err:    
raise AssertionError("Cannot click [" + imgFile + "]")    

def object_exists(self, imgFile, similarity, timeOut):    
try:    
self._wait(imgFile, timeOut, similarity)    
except FindFailed, err:    
raise AssertionError("Could not find [" + imgFile + "]")    

def type_at_object(self, imgFile, txt, timeOut, similarity):    
try:    
self._wait(imgFile, timeOut, similarity)    
self.SS.type(imgFile, txt)    
except FindFailed, err:    
raise AssertionError("Cannot type at [" + imgFile + "]")    

def paste_at_object(self, imgFile, txt, timeOut, similarity):    
try:    
self._wait(imgFile, timeOut, similarity)    
self.SS.paste(imgFile, txt)    
except FindFailed, err:    
raise AssertionError("Cannot paste at [" + imgFile + "]")    

if __name__ == '__main__':    
SRL = SikuliRemoteLibrary()    
RobotRemoteServer(SRL, *sys.argv[1:])    


e、将c:\rf_sikuli目录添加到CLASS_PATH环境变量下
f、打开cmd,到c:\rf_sikuli目录下,执行jython.bat SikuliRemoteLibrary.py
如果出现:Robot Framework remote server starting at localhost:8270,说明配置成功,可以使用了
如果出现:no named module sikuli的错误,请将sikuli-script.jar解压一下就可以了(注意解压选择解压到当前文件夹就可以)
****************第8步因该可以成功,但是由于我自己的os是windows8 64bit因此出现了一部分问题,是sikuli和64bit os的兼容问题
9、换成Autoit替换到sikuli
************安装完成后发现不是很容易学习,因此继续或回去搞定了sikuli+selenium
10、sikuli生成可执行程序
用sikuli录制脚步,生成可执行程序。
在selenium的脚本的对应位置加入了os.sys("c:\\1.skr")发现sys阻塞程序继续相应
继续发现os.popen是不阻塞的
#########################
网络原文:import os
os.system(r'"D:\Program Files\Foxit Software\Foxit reader.exe" abc.pdf') 1、os.system会阻塞程序继续运行(如果是图形界面,还会把图形界面搞的没反应),当然如果需要阻塞,自然不是问题。 2、os.system会打开一个命令行窗口,这是比较讨厌的;除非你确实需要显示这个命令行窗口或者本来就是命令行里运行的。
import os
os.popen(r'"D:\Program Files\Foxit Software\Foxit reader.exe" abc.pdf')
这样不会出现命令行窗口,不会阻塞程序运行
如果需要阻塞程序运行,可以这样写:
os.popen(r'"D:\Program Files\Foxit Software\Foxit reader.exe" abc.pdf').read()
##########################
11、总结
1、两天的时间由于之前对selenium等只是知道一点点皮毛,因此这次尝到了苦头。走了很多弯路。尝试了selenium+sikuli+robotframework和selenium+autoit+robotframework,最后全程宣告失败,因为不知道到底如何能让这些tool之间能够相通
2 、在selenium2+python解决这个问题的时候,发现弹出框selenium并不是非常好用,处理不好解决不了XXXXXXX的弹出框。因此想到了调sikuli解决该问题,但是又不知道sikuli和selenium如何通信不知道,因为明白这两个tool都是通过python编写脚本,均通过java实现,按道理应该不存在问题。
3、解决办法用sikuli录制弹出框的处理步骤,然后将其生成可执行文件,然后用selenium调用。其实就是python调用
os.sys和os.popen但是sys是阻塞加载,不适合这个过程,因此应用了popen非阻塞执行。用popen调用了sikuli的可执行文件。
4、在sikuli进行操作的时候,每部操作要用sleep(秒)或其他wait函数等待一段时间,这样可以保证脚本的可靠性
5、selenium也要在页面反应慢的转换中time.sleep(秒)停顿几分钟。
6、最终用到的技术有selenium、python、webdriver、chrome、sikuli、jre7.0、sikuliIDE、eclpise
12、最后

  #!/usr/bin/env python
#-*- coding:gbk -*-
from selenium import webdriver
from selenium.webdriver.common.keys import Keys


import time
import os
from selenium.webdriver.support import wait




webjd = webdriver.Chrome()
webjd.maximize_window()
'''
登陆
'''
webjd.get(" ")
webjd.find_element_by_id("loginname").send_keys(u"Xxxx")
'''webjd.find_element_by_id("loginname").send_keys(u"Xxxx")'''
webjd.find_element_by_id("nloginpwd").send_keys("Xxxx")


webjd.find_element_by_id("loginsubmit").click()
'''
点击优惠卷
'''
time.sleep(10)


nallpage = 1
'''
找到第三页
'''
nsteppage = 1
while nsteppage<13:
    nallpage=nallpage+1 
    nsteppage=nsteppage+1
    elempagenext = webjd.find_elements_by_class_name("next")
    elempagenext[-1].click()
    print("start page %d"%nsteppage)
    time.sleep(4)
''''''''''''''''''''''''''''''''''''
while nallpage< 62:
    time.sleep(5)
    elemfreetoken=webjd.find_elements_by_class_name("free-token") 
    nonepageelem = 1
    for elemclick in elemfreetoken:
        try:
            elemclick.click()           
            os.popen(r"E:\\workspaces\\CheckJD_Selenium\\click.skl")
            print("On page:%d click-thing-coupon:%d"%(nallpage,nonepageelem))
            time.sleep(15)
            nonepageelem=nonepageelem+1            
        except:
            print("On page:%d  misss-thing-coupon:%d"%(nallpage,nonepageelem))
            nonepageelem=nonepageelem+1   
    nallpage=nallpage+1    
    elempagenext = webjd.find_elements_by_class_name("next")
    print("get next elem count %d"%len(elempagenext))
    elempagenext[-1].click()
    time.sleep(5)
             
    

你可能感兴趣的:(自动化之路,selenium,Python)