zoukankan      html  css  js  c++  java
  • web test Automation / Selenium

     

    selenium的使用

    http://qian0021514578.iteye.com/blog/2095654

    http://www.blogjava.net/supercrsky/articles/162787.html

     

    黑莓BB10也支持Selenium WebDrive了!

    http://www.cnbbdev.com/?p=16796

     

    Selenium 是 thoughtworks公司的一个集成测试的强大工具。最近参与了一个系统移植的项目,正好用到这个工具,

    把一些使用心得分享给大家,希望大家能多多使用这样的强大的,免费的工具,来保证我们的质量。

    Selenium 的文档现存的不少,不过都太简单了。使用Selenium的时候,我更多的是直接去看API文档,好在API不错,

    一个一个看,就能找到所需要的 :-)   官方网站:http://www.openqa.org/selenium/

    好,下面进入正题!

    一、Selenium 的版本

    Selenium 现在存在2个版本,一个叫 selenium-core, 一个叫selenium-rc 。

    selenium-core 是使用HTML的方式来编写测试脚本,你也可以使用 Selenium-IDE来录制脚本,但是目前Selenium-IDE
    只有 FireFox 版本。

    Selenium-RC 是 selenium-remote control 缩写,是使用具体的语言来编写测试类。

    selenium-rc 支持的语言非常多,这里我们着重关注java的方式。这里讲的也主要是 selenium-rc,因为个人还是喜欢这种
    方式 :-)

     二、一些准备工作

    1、当然是下载 selenium 了,到 http://www.openqa.org/selenium/ 下载就可以了,记得选择selenium-rc 的版本。

    2、学习一下 xpath 的知识。有个教程:http://www.zvon.org/xxl/XPathTutorial/General_chi/examples.html
         一定要学习这个,不然你根本看不懂下面的内容!

    3、安装 jdk1.5

     三、selenium-rc 一些使用方法

    在 selenium-remote-control-0.9.0\server 目录里,我们运行 java -jar selenium-server.jar
    之后你就会看到一些启动信息。要使用 selenium-rc ,启动这个server 是必须的。

    当然,启动的时候有许多参数,这些用法可以在网站里看看教程,不过不加参数也已经足够了。

    selenium server 启动完毕了,那么我们就可以开始编写测试类了!

    我们先有个概念,selenium 是模仿浏览器的行为的,当你运行测试类的时候,你就会发现selenium 会打开一个

    浏览器,然后浏览器执行你的操作。

     好吧,首先生成我们的测试类:

    java 代码
    1. public class TestPage2 extends TestCase {   
    2.   private Selenium selenium;   
    3.   
    4.   protected void setUp() throws Exception {   
    5.      String url = “http://xxx.xxx.xxx.xxx/yyy”;   
    6.      selenium = new DefaultSelenium("localhost", SeleniumServer.getDefaultPort   
    7.                                 (), "*iexplore", url);   
    8.      selenium.start();   
    9.                
    10.      super.setUp();                        
    11.            
    12.   }   
    13.   
    14.   protected void tearDown() throws Exception {   
    15.            
    16.       selenium.stop();   
    17.       super.tearDown();   
    18.                
    19.   
    20.   }   
    21.   
    22. }  

    代码十分简单,作用就是初始化一个 Selenium 对象。其中:
    url : 就是你要测试的网站
    localhost:  可以不是localhost,但是必须是 selenium server 启动的地址
    *iexplore :  可以是其它浏览器类型,可以在网站上看都支持哪些。

    下面我就要讲讲怎么使用selenium 这个对象来进行测试。

    1、测试文本输入框

    假设页面上有一个文本输入框,我们要测试的内容是 在其中输入一些内容,然后点击一个按钮,看看页面的是否跳转
    到需要的页面。

    1. public void test1() {   
    2.            
    3.     selenium.open("http://xxx.xxx.xxx/yyy");   
    4.            
    5.     selenium.type("xpath=//input[@name='userID']""test-user");   
    6.     selenium.click("xpath=//input[@type='button']");   
    7.     selenium.waitForPageToLoad("2000");   
    8.     assertEquals(selenium.getTitle(), "Welcome");   
    9. }  

    上面的代码是这个意思:
    1、调用 selenium.open 方法,浏览器会打开相应的页面
    2、使用 type 方法来给输入框输入文字
    3、等待页面载入
    4、看看新的页面标题是不是我们想要的。

    2、测试下拉框

    java 代码
    1. public void test1() {       
    2.                
    3.     selenium.open("http://xxx.xxx.xxx/yyy");       
    4.                
    5.     selenium.select("xpath=//SELECT[@name='SBBUSYO']""index=1");   
    6.     selenium.click("xpath=//input[@type='button']");       
    7.     selenium.waitForPageToLoad("2000");       
    8.     assertEquals(selenium.getTitle(), "Welcome");       
    9. }     

    可以看到,我们可以使用 select 方法来确定选择下拉框中的哪个选项。
    select 方法还有很多用法,具体去看看文档吧。

    3、测试check box

    java 代码

    1. public void test1() {           
    2.                    
    3.     selenium.open("http://xxx.xxx.xxx/yyy");           
    4.                    
    5.     selenium.check("xpath=//input[@name='MEICK_000']");     
    6.     selenium.click("xpath=//input[@type='button']");           
    7.     selenium.waitForPageToLoad("2000");           
    8.     assertEquals(selenium.getTitle(), "Welcome");           
    9. }      

    我们可以使用 check 方法来确定选择哪个radio button

    4、得到文本框里的文字

    java 代码
    1. assertEquals(selenium.getValue("xpath=//input[@name='WNO']"), "1");  

    getValue 方法就是得到文本框里的数值,可不是 getText 方法,用错了可就郁闷了。

    5、判断页面是否存在一个元素

    java 代码
    1. assertTrue(selenium.isElementPresent("xpath=//input[@name='MEICK_000']"));  

    一般这个是用来测试当删除一些数据后,页面上有些东西就不会显示的情况。

    6、判断下拉框里选择了哪个选项

    java 代码
    1. assertEquals(selenium.getSelectedIndex("xpath=//SELECT[@name='HATIMING']"), "1");  

    这个可以用来判断下拉框显示的选项是否是期望的选项。

    7、如果有 alert 弹出对话框怎么办?

    这个问题弄了挺长时间,可以这样来关闭弹出的对跨框:

    java 代码
    1. if(selenium.isAlertPresent()) {   
    2.   
    3.    selenium.getAlert();   
    4.   
    5. }  

    其实当调用 selenium.getAlert() 时,就会关闭 alert 弹出的对话框。
    也可以使用 System.out.println(selenium.getAlert()) 来查看对跨框显示的信息。

    在测试的时候,有的人会显示许多alert 来查看运行时的数据,那么我们可以用下面的方式来关闭那些 alert:

    java 代码
    1. while(selenium.isAlertPresent()) {       
    2.       
    3.    selenium.getAlert();       
    4.       
    5. }   

    8、如何测试一些错误消息的显示?

    java 代码
    1. assertTrue(selenium.getBodyText().indexOf("错误消息")>=0);  

    切记: getBodyText 返回的时浏览器页面上的文字,不回包含html 代码的,如果要显示html 代码,用下面这个:

    java 代码
    1. System.out.println(selenium.getHtmlSource());  

    以上就是最常用的几个方法了,例如 click, type, getValue 等等。
    还有就是一定要学习 xpath, 其实xpath 也可以有“与、或、非”的操作:

    java 代码
    1. selenium.check("xpath=//input[(@name='KNYKBN')and(@value='Y')]");  

    四、其他

    selenium 还有更多的用法,例如弹出页面等等。当面对没见过的测试要求时,我最笨的方法就是按照api文档一个一个找,
    好在不多,肯定能找到。

    Linux 强大的nohup(进程后台执行) 

    http://bestchenwu.iteye.com/blog/1073565

    转载:http://baike.baidu.com/view/1839401.htm

    nohup

    用途:LINUX命令用法,不挂断地运行命令。   

    语法:nohup Command [ Arg ... ] [ & ]   

    描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示“and”的符号)到命令的尾部。   

    如果不将 nohup 命令的输出重定向,输出将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。   

    退出状态:该命令返回下列出口值:   

    126 可以查找但不能调用 Command 参数指定的命令。   

    127 nohup 命令发生错误或不能查找由 Command 参数指定的命令。   

    否则,nohup 命令的退出状态是 Command 参数指定命令的退出状态。   

    nohup命令及其输出文件   

    nohup命令:如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户/关闭终端之后继续运行相应的进程。nohup就是不挂起的意思( no hang up)。   

    该命令的一般形式为:nohup command &   使用nohup命令提交作业   

    如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件:   

    nohup command > myout.file 2>&1 &   

    在上面的例子中,输出被重定向到myout.file文件中。   

    使用 jobs 查看任务。   

    使用 fg %n 关闭。   

    另外有两个常用的ftp工具ncftpget和ncftpput,可以实现后台的ftp上传和下载,这样我就可以利用这些命令在后台上传和下载文件了。

    Linux后台进程管理的一些命令小结

    http://www.jb51.net/LINUXjishu/72583.html

    Linux后台进程管理的一些命令:fg、bg、jobs、&、ctrl + z命令,供大家学习参考

    一、 &

    加在一个命令的最后,可以把这个命令放到后台执行 ,如gftp &,

    二、ctrl + z

    可以将一个正在前台执行的命令放到后台,并且处于暂停状态,不可执行

    三、jobs

    查看当前有多少在后台运行的命令

    jobs -l选项可显示所有任务的PID,jobs的状态可以是running, stopped, Terminated,但是如果任务被终止了(kill),shell 从当前的shell环境已知的列表中删除任务的进程标识;也就是说,jobs命令显示的是当前shell环境中所起的后台正在运行或者被挂起的任务信息;

    四、fg

    将后台中的命令调至前台继续运行

    如果后台中有多个命令,可以用 fg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)

    五、bg

    将一个在后台暂停的命令,变成继续执行 (在后台执行)

    如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出,%jobnumber是通过jobs命令查到的后台正在执行的命令的序号(不是pid)

    将任务转移到后台运行:

    先ctrl + z;再bg,这样进程就被移到后台运行,终端还能继续接受命令。

    概念:当前任务

    如果后台的任务号有2个,[1],[2];如果当第一个后台任务顺利执行完毕,第二个后台任务还在执行中时,当前任务便会自动变成后台任务号码“[2]” 的后台任务。所以可以得出一点,即当前任务是会变动的。当用户输入“fg”、“bg”和“stop”等命令时,如果不加任何引号,则所变动的均是当前任务

    进程的终止

    后台进程的终止:

    方法一:

    通过jobs命令查看job号(假设为num),然后执行kill %num

    方法二:

    通过ps命令查看job的进程号(PID,假设为pid),然后执行kill pid

    前台进程的终止:

    ctrl+c

    kill的其他作用

    kill除了可以终止进程,还能给进程发送其它信号,使用kill -l 可以察看kill支持的信号。

    SIGTERM是不带参数时kill发送的信号,意思是要进程终止运行,但执行与否还得看进程是否支持。如果进程还没有终止,可以使用kill -SIGKILL pid,这是由内核来终止进程,进程不能监听这个信号。

    进程的挂起

    1)、后台进程的挂起:

    在solaris中通过stop命令执行,通过jobs命令查看job号(假设为num),然后执行stop %num;

    在redhat中,不存在stop命令,可通过执行命令kill -stop PID,将进程挂起;

    当要重新执行当前被挂起的任务时,通过bg %num 即可将挂起的job的状态由stopped改为running,仍在后台执行;当需要改为在前台执行时,执行命令fg %num即可;

    2)、前台进程的挂起:

    ctrl+Z;

    linux selenium 启动方式一

    java -jar /opt/selenium-server-standalone-2.46.0.jar -role hub -port 4444

    linux selenium 后台启动方式二

    nohup java -jar /opt/selenium-server-standalone-2.46.0.jar -role hub -port 4444 >> selenium.log 2>&1 &

    http://10.27.188.106:4444/grid/console

     

    ssl_error_no_cypher_overlap  

    http://dl2.iteye.com/upload/attachment/0116/9582/54a4a8de-9355-3539-961c-44b78e82abbd.png

    http://blog.sina.com.cn/s/blog_40e1ba640102vctc.html

    工作中遇到的问题:配置nginx服务器完成后测试,360se,极速浏览器可以访问,但是FF,chrome不能。

    FF报错:连接 ****.cn 时发生错误。 无法安全地与对等端通信:没有双方共用的加密算法。 (错误码: ssl_error_no_cypher_overlap)

    Chrome报错:A secure connection cannot be established because this site uses an unsupported protocol.

    错误代码:ERR_SSL_VERSION_OR_CIPHER_MISMATCH 

    经同事帮忙查明原因,赶紧记录下:

    在服务器/usr/local/nginx/conf/include/下的lvs 配置 lvscheck.****.net_ssl.conf 中  下面这行导致的,原因是FF,chrome不支持SSLv3。

     ssl_protocols SSLv3 ;

    参照其他正常的服务器修改为:

     ssl_protocols      TLSv1 TLSv1.1 TLSv1.2 SSLv3;

    SSL/TLS协议安全系列:再见,RC4

    http://drops.wooyun.org/tips/9846

    0x00背景


    RC4是美国密码学家Ron Rivest在1987年设计的密钥长度可变的流加密算法。它加解密使用相同的密钥,因此也属于对称加密算法。RC4曾被用在有线等效加密(WEP)中,但由于其错误的使用的方式已被有效破解,而如今,它又被TLS协议所放弃。

    在2015年2月发布的RFC7465中,RC4密码套件被禁止在TLS各版本的客户端和服务端使用。客户端禁止在ClientHello中包含RC4套件,服务端禁止从ClientHello中提供的密码套件中选择RC4,如果客户端只提供了RC4,服务端必须终止握手。另外,谷歌、微软、Mozilla也宣布将于明年年初在各自的浏览器中停止对RC4的支持。

    从1994年RC4被匿名公开在Cypherpunks邮件列表,到如今RC4被TLS协议放弃,安全研究员们做出了很多贡献。

    0x01 RC4


    RC4算法分为两个部分。第一部分是密钥调度算法(key-scheduling algorithm),根据key初始化S盒,第二部分是伪随机数生成算法(Pseudo-random generation algorithm),生成密钥流,同时更新S盒的状态。

     

     

     

     

    BlackBerry一直在持续推进基于BB10浏览器的开发工具,这次10.2.1升级支持的Selenium WebDrive将允许开发者在BB10浏览器远程执行自动化测试!

    随着10.2.1的发布,黑莓10现在支持 Selenium 的webdriver! Selenium是一个自动化的浏览器,使它显著更容易测试网站和Web应用程序的工具。 因为它支持多种浏览器(Chrome浏览器,火狐,的iOS,Android等),并支持多种的语言绑定(Java和C,Python和Ruby等),所以你可以选择Selenium是非常有用的一个是最适合你的工作流程。 Selenium对设备在浏览器内,并在模拟器支持。

    604x604xSeleniumWebdriver_thumb.png.pagespeed.ic.XX-BmNYTf_

    访问官方 Selenium文档进行了详细的文档,以了解如何Selenium可以在您的开发和测试工作流中工作。

    入门指南:在BlackBerry 10上的Selenium WebDriver

    要求:

    1. 黑莓10设备
    2. 软件版本10.2.1或更高版本

    设置

    设备

    1. 您的设备连接到您的电脑
    2. 打开BB10浏览器。 点击设置>开发工具>启用“Selenium WebDriver”。 使IP地址和端口的注意。
    3. 退出菜单并保持浏览器打开

    常规设置和绑定

    请访问SeleniumHQ有关如何使用语言的选择与Selenium的结合的最新信息。

    Java和Eclipse的设置示例

    这个例子将打开google.com,搜索’黑莓10′并打印生成的页面标题来调试控制台。

    1. 下载的Java绑定(selenium-java-x.xx.0.zip)这里https://code.google.com/p/selenium/downloads/list

    2. 找到并解压缩文件

    3. 打开解压后的文件夹,选择这两个“.jar”的文件(selenium-java-x.xx.x-srcs.jar and selenium-java-x.xx.jar)并将它们移到了“库”目录中相同的解压缩文件夹中。

    一个。 请记住这个文件的位置,您将在第7步导入这些

    4.  启动Eclipse的应用程序( 下载和安装Eclipse标准)

    5. 创建一个新的Java项目

    a. 文件>新建> Java项目

    6. 命名你的项目

    a. 在我们的例子中,我们把它称为“Selenium”,单击Finish(完成)

    7.  导入Java绑定到你的项目

    a. 右键单击您的项目“Selenium”,点击“属性 ”

    b. 选择“Java构建路径位于左侧的菜单上

    c. 点击“添加外部JAR”(“库”选项卡中)

    i. 在您在步骤2中解压缩“selenium-x.xx.x /libs”目录下选择所有的jar文件

    ii. 这应包括您添加到“库”目录下两个Selenium jar文件

    8. 点击“打开”

    9. 点击“确定”

    10. 创建并命名一个新的“PackageClass”

    a. 右键单击您的“Selenium”项目>新建>软件包命名为“test”

    i. 确保“Create package-info.java保持未选中

    ii. 点击“完成”

    b. 右键单击您的“Selenium”项目,然后选择“类”,将其命名为“test”

    i. 注:确保“public static void main(String[ ] args)”被选中

    ii. 点击“完成”

    11。 复制并粘贴以下到您的项目:

    package test;
    
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.remote.*;
    import java.net.MalformedURLException;
    import java.net.URL;
    
    public class test {
    
    public static void main(String[] args) throws MalformedURLException {
     //BB10 bindings
     //the IP will vary based on your device configuration
     //go to Browser > Settings > Developer Tools > Selenium WebDriver for your IP
     DesiredCapabilities capability = DesiredCapabilities.chrome();
     WebDriver driver = new RemoteWebDriver(new URL("http://169.254.0.1:1338"), capability); 
    
     //Navigate to Google.com
     driver.get("http://www.google.com/");
    
    //Finds the element "q"
     WebElement element = driver.findElement(By.name("q"));
    
    //Types "BlackBerry 10" into the input field 
     element.sendKeys("BlackBerry 10");
    
    //Equivalent to hitting "enter" when in a input field
     element.submit();
    
    //Returns the title of the page
     System.out.println("Page title is: " + driver.getTitle());
    
     //Exits the test case 
     driver.quit();
     }
    }

    12. 点击Run(shift-cmd-f11)

    a. 从保存并启动窗口中单击“确定”

    示例使用Python绑定

    from selenium import webdriver
    from selenium.webdriver.common.keys import Keys
    from selenium.webdriver.common.desired_capabilities import DesiredCapabilities
    
    #BB10 bindings,
    #the IP will vary based on your device configuration
    #Go to Browser > Settings > Developer Tools > Selenium WebDriver for your IP
    
    driver = webdriver.Remote(command_executor='http://169.254.0.1:1338', desired_capabilities={}) 
    
    #Navigate to Google.com
    driver.get("http://www.google.com/");
    
    #Finds the element "q" by name
    element = driver.find_element_by_name("q") 
    
    #Types "BlackBerry 10" into the input field
    element.send_keys("BlackBerry 10") 
    
    #Equivalent to hitting "enter" key when in a input field
    element.submit() 
    
    #Returns the title of the page
    print driver.title
    
    #Exits the test case 
    driver.quit()

    有关黑莓10 Selenium WebDrive支持问题? 留下评论让我们知道!

     

     

     

    end

  • 相关阅读:
    ant的安装和配置
    jmeter3.x的jtx文件解析
    爬虫:网页里元素的xpath结构,scrapy不一定就找的到
    如何实现新浪微博功能:关注某个的发布信息,自动点赞和转发
    性能测试各个指标的含义
    python模块相关
    curl的用法
    第十八章 Python批量管理主机(paramiko、fabric与pexpect)
    死锁产生的原因和解锁的方法
    读写分离死锁解决方案、事务发布死锁解决方案、发布订阅死锁解决方案
  • 原文地址:https://www.cnblogs.com/lindows/p/14390226.html
Copyright © 2011-2022 走看看