执行的第二个方法要在第一个基础上执行
如果不 quit 的话 又说不能开启新的 session ,可是 quit 后呢 应用都结束了,没法在原来基础上跑
难道说 appium 只能跑一整个流程?
贴一下你的脚本代码,要不然看不出是什么问题
有依赖关系的,放在一个 testcase 里面。
然后请保持 testcase 之间的独立性。
#1 楼 @umbrella1978
testStudentlist() 这个方法就不会执行
package appiumdemo.mytest;
import io.appium.java_client.AppiumDriver;
import java.io.File;
import java.net.URL;
import java.util.List;
import org.junit.After;
import org.junit.Before;
import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.remote.CapabilityType;
import org.openqa.selenium.remote.DesiredCapabilities;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
/**
Unit test for simple App.
*/
public class Login1Test extends TestCase
{
private AppiumDriver driver;
/**
@Before
protected void setUp() throws Exception {
// TODO Auto-generated method stub
super.setUp();
File classpathRoot = new File(System.getProperty("user.dir"));
File appDir = new File(classpathRoot, "/apps/teacher");
File app = new File(appDir, "teacher-4.0y--2014-12-11-1851-.apk");
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("udid","430072fe4758a07f");
capabilities.setCapability("deviceName","430072fe4758a07f");
capabilities.setCapability("platformVersion", "4.3");
capabilities.setCapability("app", app.getAbsolutePath());
capabilities.setCapability("appPackage", "air.com.xueersi.ICSClient3");
capabilities.setCapability("appActivity", "air.com.xueersi.ICSClient3.LoginActivity");
//设置中文输入的属性
capabilities.setCapability("unicodeKeyboard", "True");
capabilities.setCapability("resetKeyboard", "True");
driver = new AppiumDriver(new URL("http://127.0.0.1:4492/wd/hub"), capabilities);
}
@After
protected void tearDown() throws Exception {
// TODO Auto-generated method stub
driver.quit();
}
/**
* @return the suite of tests being tested
*/
public static Test suite()
{
return new TestSuite( Login1Test.class );
}
/**
* Rigourous Test :-)
* @throws InterruptedException
*/
@org.junit.Test
public void testLogin() throws InterruptedException
{
List textFieldsList = driver.findElementsByClassName("android.widget.EditText");
textFieldsList.get(0).sendKeys("滕俊龙");
Thread.sleep(2000);
textFieldsList.get(1).sendKeys("020639");
Thread.sleep(2000);
driver.findElementByName("登录").click();
Thread.sleep(2000);
}
@org.junit.Test
public void testStudentlist() throws InterruptedException
{
Thread.sleep(2000);
WebElement Studentlistbutton = driver.findElement(By.id("air.com.xueersi.ICSClient3:id/menu_student"));
Studentlistbutton.click();
}
}
我也遇到这个问题了,我本来把 appium 的启动环境放在 testcase 的的配置中,然后执行 login 方法,再然后后续的其他 case 都依赖 Login,但是呢,执行完 login 这条 case 以后,就会出现 quit 的情况。结果第二条 case 就只能再跑一次 login 方法了,很浪费时间。
我目前的想法是,第一次启动的时候使用 app 的启动 activity,然后跑其他 case 的时使用应用的其他 activity。现在还没有理顺,不知道能不能行通了。
@nancy2896 @jerome
请使用@BeforeClass和@AfterClass
注释 ,并且去掉对 TestCase 的继承,将 setup 和 teardown 方法改为静态方法如下
public class LoginTest{
@BeforeClass
public static void setup(){
}
@AfterClass
public static void teardown(){
}
@Test
public void test1(){}
//......
}
不要继承 TestCase,使用@Before和@After
因为这俩注释会在每个@Test
执行前后都执行一次,导致出现 appium 的 session 会初始化两次
TestNG, 用 Xml 运行,case 之间继承 driver,写一个 driver 的继承类,有活动的 driver 则继承,driver 为空则新建。
#6 楼 @umbrella1978 恩 我按你说的方法试了 好了 非常感谢
#6 楼 @umbrella1978
另一个测试类怎么能延续前面的测试呢?我现在是两个应用要交互,我得写多个测试类:
比如我在测试类 A 中执行了方法 a,完成了登录
我在测试类 B 中想执行登录后的操作,能不能不再重复登录动作?
或者说能不能在测试类 A 中执行完登录后暂停,然后我执行另外一个类,完了再回来执行测试类 A,有办法实现么?
谢谢
public class LoginTest{
@BeforeClass
public static void setup(){
}
@AfterClass
public static void teardown(){
}
@Test
public void login(){
}
@Test(dependsOnMethods = { "login" })
public void testcase(){
}
}
试试看吧
#12 楼 @nancy2896 看下 jar 包有没有导进去。
你可以在 login 方法中去调用另一个类的方法,然后再 dependsOnMethods,原则上应该可行,具体我没试过,你可以试试。
dependsOnMethods:依赖某个方法,如果方法已执行过则继续,如果方法没执行过则先执行该方法。
#14 楼 @nancy2896 是的