wing820 发表于 2011-8-30 11:47:42

有关Selenium中如何连续执行2个方法

想问下,有没有人知道如何通过selenium,连续运行1个class中的2个方法?

比如说:
方法1中执行了登录和添加的操作。
方法2中执行了修改的操作。

如何在执行完方法1之后,直接执行方法2,而不需要重新开启1个Selenium?

annieqi 发表于 2011-8-30 17:00:56

我也是新手,但是如果这个东西要是让我做的话,我会这么做。

单元测试框架中有一个suite概念,一个suite 加载login的登录方法,加载你的添加方法,加载你的修改方法,
是直接调用方法的,没有冲突。

eqbin 发表于 2011-9-5 11:54:38

两个@Test连在一起就行啦。。

sgfluolei 发表于 2011-11-17 11:38:45

给个简单的例子吧:
1)功能代码,也就是你的登录和添加操作的代码:
//登录
package MyScript;
import com.thoughtworks.selenium.*;
public class Login{
        public void myLogin(Selenium selenium){
                selenium.open("/");
                selenium.type("//input[@id='userId' and @value='' and @type='text']", "sgf");
                selenium.type("id=password", "111111");
                selenium.type("//input[@id='organization' and @value='' and @type='text']", "sgf");
                selenium.click("name=submitForm");
        }
}

//添加
package MyScript;

import com.thoughtworks.selenium.*;

public class CreateUC
{
        public void myCreateUC(Selenium selenium){

                selenium.waitForPageToLoad("30000");
                System.out.println("CreateUC-1");
                selenium.selectFrame("mainFrame");
                selenium.selectFrame("commandlist");
                selenium.click("//table[@id='urgentcast']/tbody/tr/td/b");
                selenium.selectFrame("relative=up");
                selenium.selectFrame("detail");
                selenium.waitForPageToLoad("30000");
                selenium.selectFrame("ucToolbar");
                selenium.click("id=newUrgentLink");
                selenium.selectFrame("relative=up");
                selenium.selectFrame("ucFrame");
                selenium.selectFrame("ucList");
                selenium.click("link=New Urgent Cast");
                selenium.selectFrame("relative=up");
                selenium.selectFrame("ucDetail");
                selenium.waitForPageToLoad("30000");
                selenium.type("id=name", "a");
                //selenium.waitForPageToLoad("10000");
                selenium.type("id=text", "aaaaaaaaaaaaaa");
                selenium.select("id=selDurationSecond", "label=03");
                selenium.selectFrame("relative=up");
                selenium.selectFrame("relative=up");
                selenium.selectFrame("ucToolbar");
                selenium.click("id=saveLink");
                System.out.println("CreateUC-2");
        }
}

//创建一个selenium对象,去调用这两个方法(登录,添加)
package Test;

import MyScript.CreateUC;
import MyScript.Login;

import com.thoughtworks.selenium.DefaultSelenium;
import com.thoughtworks.selenium.Selenium;

import junit.framework.TestCase;

public class TestMyScript extends TestCase{

        static Selenium selenium = null; //关键,一定要是静态的
        public TestMyScript(String strFunctionName){
                super(strFunctionName);       
                if (selenium == null) {//这个判断也很关键
                        selenium = new DefaultSelenium("localhost", 4444, "*chrome", "http://192.168.2.100/");
                        selenium.start();
                }
               
        }
        public void testLogin(){
                Login login = new Login();
                login.myLogin(selenium);
        }
       
        public void testCreateUC(){
                CreateUC createUC = new CreateUC();
                createUC.myCreateUC(selenium);
        }       

}

//加入testsuite
package Test;

import junit.framework.TestSuite;
import junit.textui.TestRunner;

public class RunWithTestSuite{
       
        public TestSuite testLogin(){
                TestSuite suite = new TestSuite();
                suite.addTest(new TestMyScript("testLogin"));
                suite.addTest(new TestMyScript("testCreateUC"));
                return suite;
        }
        public static void main(String[] args){
                RunWithTestSuite myTestSuite =new RunWithTestSuite();
                TestSuite suite = myTestSuite.testLogin();
                TestRunner.run(suite);
        }
}

gaha 发表于 2011-11-18 09:14:03

suit()会把每个独立的class中的start、stop都执行一次,如果是一个场景内的对象好像有点儿冗余,其实只要反复循环start和stop之间的部分就可以了。只要后台代理启动着,怎么做,做什么,都是你说了算。

gaha 发表于 2011-11-18 09:14:58

suit()会把每个独立的class中的start、stop都执行一次,如果是一个场景内的对象好像有点儿冗余,其实只要反复循环start和stop之间的部分就可以了。只要后台代理启动着,怎么做,做什么,都是你说了算。

遇上鱼子 发表于 2011-11-21 16:16:09

建议参考 seleniumgrid
页: [1]
查看完整版本: 有关Selenium中如何连续执行2个方法