robotframework自动化测试环境搭建与常见的问题

1、通过使用 RFT-64(针对Windows 7 64位的系统)压缩文件进行一键安装;

     1) 首先解压RFT-64文件,找到setup.bat文件,以管理员身份运行进行一键安装,根据提示完成安装操作。

     2) 安装完成后,打开cmd窗口,输入python查看环境变量是否配置成功,注:提示‘Python’不是内部或外部命令,说明Python的环境变量没有配置成功,找到Python的安装目录,将安装路径配置到环境变量中

     3) 打开cmd窗口,输入pip list查看安装过的插件,注:提示‘pip’不是内部或外部命令,说明环境变量没有配置成功,将….\Python27\Scripts安装路径配置到环境变量中

     4) 一切安装完成后,写一个简单的事例,验证一下驱动,查看是否能够正常打开浏览器,以及对浏览器的页面操作是否正常:

         IE浏览器驱动:IEDriverServer.exe

         Google浏览器驱动:chromedriver.exe

         Fire Fox浏览器  geckodriver.exe    需要安装对应的版本,否则无法正常启动浏览器

          注:(根据对应的版本选择对应的驱动程序,这里选用的是32位的)

          但是我在使用Selenium WebDriver时,遇到了很多坑。这些问题,有的是因为Selenium WebDriver与浏览器不同版本之间兼容性的问题,有的是Selenium WebDriver本身的bug,当然也不乏自己对Selenium WebDriver某些功能理解不透彻。我花时间总结了一下,分享给大家,希望大家以后遇到问题可以避过这些坑,少走弯路。

2、 插入中文数据提示
     FAIL UnicodeEncodeError: ‘latin-1’ codec can’t encode characters in position 92-107: ordinal not in range(25

     DataBaseLibrary插入中文乱码的解决:修改D:\Python27\Lib\site-packages\DatabaseLibrary\connection_manager.py里的connect_to_database函数,self._dbconnection = db_api_2.connect (db=dbName, user=dbUsername, passwd=dbPassword, host=dbHost, port=dbPort, charset=”utf8”),增加charset设定

3、调用MySQL出现问题

    ImportError: DLL load failed: \xd5\xd2\xb2\xbb\xb5\xbd\xd6\xb8\xb6\xa8\xb5\xc4\xc4\xa3\xbf\xe9\xa1\xa3

    安装MySQL-pythonMySQL_python-1.2.5-cp27-none-win_amd64.whl,打开cmd窗口,执行pip install  MySQL_python-1.2.5-cp27-none-win_amd64.whl

4、调用cx_Oracle,报错

    ImportError: DLL load failed: \xd5\xd2\xb2\xbb\xb5\xbd\xd6\xb8\xb6\xa8\xb5\xc4\xc4\xa3\xbf\xe9\xa1\xa3

    解决:RobotFramework在安装cx_Oracle后,如果直接连接Oracle数据库时,会出现“Dll load failed”错误。因为Python在使用cx_Oracle类库访问oracle需要oci接口。当cx_Oracle找不到需要的oci的dll的时候就会报这个错误。

    解决方法可以从oracle的客户端找3个dll文件拷贝到cx_Oracle的安装目录D:\Python25\Lib\site-packages

    oraociei11.dll

    oraocci11.dll

    oci.dll

   资源访问路径: http://download.csdn.NET/download/benq0124/7094561

    还是报错

    ImportError: DLL load failed: %1 \xb2\xbb\xca\xc7\xd3\xd0\xd0\xa7\xb5\xc4 Win32 \xd3\xa6\xd3\xc3\xb3\xcc\xd0\xf2\xa1\xa3

    原因:oci.dll的版本一定要和cx_Oracle模块的版本一致,不一定要和实际的Oracle的数据版本一致。

 

    例如:cx_Oracle版本是:10g的,那么oci.dll 也必须是10g的,至于实际连接的数据库版本,只要版本比10g低就可以了,例如9i。

    解决:网上找oci.dll 64位相对应版本的,拷贝到cx_Oracle的安装目录D:\Python27\Lib\site-packages


    InterfaceError: Unable to acquire Oracle environment handle

    我用的客户端是instantclient,因为cx_Oracle连接数据库的时候要用到客户端中的lib,而python是64位的,cx_Oracle自然是64位的,所以客户端也应该用64位的。换成64位的instantclient,哈哈,搞掂!

    64位的instantclient不好的地方就是无法用plsql developer了,当然可以在另一台机器上配置32位的instantclient,然后远程访问。

    依然报错

    InterfaceError: Unable to acquire Oracle environment handle 或者

    ImportError: DLL load failed: %1 \xb2\xbb\xca\xc7\xd3\xd0\xd0\xa7\xb5\xc4 Win32 \xd3\xa6\xd3\xc3\xb3\xcc\xd0\xf2\xa1\xa3

    就是要把instantclient它的安装路径配置到环境变量中,配置好以后重新启动一下ride

 

5、用rf运行IEdriver的速度好慢,比如在输入框输入用户名,一秒输入一个字符。你们的是不是这样子的?。如果是chromedriver就很快

      解决办法:把IEDriver从64位换成32位

6、Firefox启动不起来,或者是启动了,页面是空白的,URL地址栏是空的

       解决办法:可能是Firefox版本过高,碰到此问题请降低Firefox版本,最好是45.0版本以下

7、怎么制定robotframework的日志路径?

      解决办法:在run的arguments输入这个“-l D:\RobotFramework\Robot_Report\log -r D:\RobotFramework\Robot_Report\report -o D:\RobotFramework\Robot_Report\output ”

8、robotframework的case跑完后,“Report”和“Log”按钮是灰色的,点击不了

     解决办法:启动任务管理器(ctrl+alt+del),IE的进程,找IEDriverServer.exe结束掉,如果是chrome,就找到chromeDriverServer.exe。如下截图是IE浏览器的。

9、数据备份

    1) 通过excel对数据库进行数据备份

        通过执行以下语句插入excel数据备份表(针对MySQL)

        LOAD DATA LOCAL INFILE “C:/Users/PC/Desktop/t_baike_word_value.csv“   所要插入数据的绝对路径

 

        INTO TABLE `t_baike_word_value`     所要插入数据的表

 

        CHARACTER SET utf8          设置编码格式

 

         FIELDS TERMINATED BY “\t”

 

        TERMINATED BY “,”

 

        OPTIONALLY ENCLOSED BY ‘”’

 

        ESCAPED BY ‘\\’

 

        LINES TERMINATED BY “\r\n”

    2) 直接对数据库进行操作

        MySQL    user_center    user_center    user_center

        Oracle      p95100     l234123   orcl

10、元素定位

       1)元素定位的方法:findElement() 与 findElements()

            a、findElement() 该方法返回基于指定查询条件的webElement对象,或抛出不符合条件的异常  eg:driver.findElement(By.id(“userID”));

       b、findElements() 该方法返回指定查询条件的WebElement的对象集合,或返回null
       2)WebElement对象提供的各种定位元素策略
           
            ID:driver.findElement(By.id(<elementID>))
            Name:driver.findElement(By.name(<elementName>))
            className:driver.findElement(By.className(<elementClassName>))
            tagName:driver.findElement(By.tagName(<htmlTagName>))
            linkText:driver.findElement(By.linkText(<linkText>))
            partialLinkText:driver.findElement(By.partialLinkText(<partialLinkText>))
            css:driver.findElement(By.cssSelector(<cssSelector>))
            xpath:driver.findElement(By.xpath(<xpathQuery>))
     3)webelement类提供了诸多方法
           在我们开发脚本过程中如何选择最可靠,效率最高的方法,使用id,name是首选,因为他们在html标签中是唯一的,所以是最可靠的
     ID定位:driver.findElement(By.id(“username”))
     name定位:driver.findElement(By.name(“username”))
     class定位:driver.findElement(By.className(“username”))
     多学一招:WebElement类支持查询子类元素,如果页面中存在重复元素,但在不同div中,我们可以先定位到其父元素,然后定位其子元素,方法如下:
     WebElement hello = driver.findElement(By.id(“div1”)).findElement(By.lindText(“hello”));
     4)使用WebElements定位多个相似的元素
          比如页面中存在五个单选按钮,他们有相同的class属性,值为:myRadio,我们想对五个按钮循环操作,我们可以把它们全部取出来放到集合中,然后做循环操作,如下:
          List<WebElement> radios = driver.findElements(By.className(“myRadio”));
          for(int i = 0;i<radios.size();i++){
                radios.get(i).click();
          }
          其他定位方法与操作id,name类似,这里不再赘述,接下来我着重对css选择器与Xpath描述下
      5)WebDriver 的By类中提供了cssSelector()方法,该方法使用有以下几种形式:
           a、使用相对路径定位元素
                 如,我们要定为DOM中的input元素,我们可以这样操作,不考虑其在DOM中的位置,但这样做存在一定弊端,当DOM中存在多个input元素时,该方法总返回DOM中的第一个元素,这并不是我们所期待的
            eg:WebElement username = driver.findElement(By.cssSelector(“input”));
            另外,为了使用这种方法更准确的定位元素,我们可以结合该元素的其他属性来实现精确定位的目的
     b、结合id来定位,driver.findElement(By.cssSelector(“input#username”)); 在标签与id之间使用#连接,如果对css了解的朋友一看就知道为什么会这样写了,不了解也没关系,只要记住这种写法就OK了
            另外该方法也可简写为driver.findElement(By.cssSelector(“#username”)); 有点儿类似于id选择器
          c、使用元素的任何属性来定位元素
           driver.findElement(By.cssSelector(“标签名[属性名=’属性值’]”));
     d、匹配部分属性值
                ^=        driver.findElement(By.cssSelector(“标签名[属性名^=’xxx’]”));  匹配属性值以xxx开头的元素
                = &nbsp; &nbsp; &nbsp; &nbsp;driver.findElement(By.cssSelector("标签名[属性名 = &nbsp; &nbsp; &nbsp; &nbsp;driver.findElement(By.cssSelector("标签名[属性名 =’xxx’]”));  匹配属性值以xxx结尾的元素
                *=         driver.findElement(By.cssSelector(“标签名[属性名^=’xxx’]”));  匹配属性值包含xxx的元素
      6)使用相对+绝对路径方法
            这里是我自己定义的方法,方便记忆,的确也是这样来实现的
       driver.findElement(By.cssSelector(“div#login>input”))   该方法中“div#login>input” 首先通过相对路径定位到id为login的div元素,然后查找其子元素input(绝对路径)
      7)使用xpath定位元素
            相比cssSelector,xpath是我比较常用的一种定位元素的方式,因为它很方便,缺点是,消耗系统性能
            a、使用绝对路径定位元素
                  driver.findElement(By.xpath(“/html/body/div/form/input”))
       b、使用相对路径定位元素
            driver.findElement(By.xpath(“//input”))   返回查找到的第一个符合条件的元素
      c、使用索引定位元素,索引的初始值为1,注意与数组等区分开
           driver.findElement(By.xpath(“//input[2]”))   返回查找到的第二个符合条件的元素
      d、结合属性值来定位元素
           driver.findElement(By.xpath(“//input[@id=’username’]”));
           driver.findElement(By.xpath(“//img[@alt=’flowr’]”));
      e、使用逻辑运算符,结合属性值定位元素,and与or
           driver.findElement(By.xpath(“//input[@id=’username’ and @name=’userID’]”));
      f、使用属性名来定位元素
           driver.findElement(By.xpath(“//input[@button]”))
      g、类似于cssSlector,使用部分属性值匹配元素
                 starts-with()    driver.findElement(By.xpath(“//input[stars-with(@id,’user’)]”))
                 ends-with        driver.findElement(By.xpath(“//input[ends-with(@id,’name’)]”))
                 contains()        driver.findElement(By.xpath(“//input[contains(@id,”ernam”)]”))

      8)使用任意属性值匹配元素

      driver.findElement(By.xpath(“//input[@*=’username’]”))
   9)使用innerText定位元素
     a、使用cssSelector查找innerText定位元素
           driver.findElement(By.cssSelector(“span[textContent=’新闻’]”));
     b、使用xpath的text函数
          driver.findElement(By.xpath(“//span[contains(text(),’hello’)]”))   包含匹配
          driver.findElement(By.xpath(“//span[text()=’新闻’]”))     绝对匹配

11、jenkins集成执行

  1)首先需要申请一台远程测试机;

  2)然后在jenkins新建一个节点

  3)然后在该节点下面新建测试工程

  4)配置项目       

      命令执行:pybot -i P1 -l log.html -r report.html -o output.xml C:\jenkins\workspace\autoTest_portal\autoTest\GuaHao_Web

    



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值