第一个Demo-原生
本章原生所指的就是App移动应用本身。
1、启动Eclipse,鼠标右键New--->Project。
2、创建Java项目,选择Java目录下的Java Project。
3、输入项目名称(例如:My_Appium_Demo),点击Finish完成。
4、创建lib文件夹,用来存放jar包。把Appium Clients jar和Selenium jar包拷贝到文件夹里。
5、创建app文件夹,用来存放应用程序。把应用程序testApp.apk拷贝到文件夹里。
6、选中拷贝过来的Appium Clients jar和Selenium jar包,鼠标右键Build Path--->Add to Build Path。
7、Appium Clients jar和Selenium jar包已经被项目引用了。
8、选中src源文件夹,鼠标右键New--->Class,创建Java类,输入包名(例如:com.test.demo)、类名(例如:模拟器示例为Android_App_Simulator,真机示例为Android_App_RealMachine),点击Finish完成。
9、第一个Demo项目,Android-原生(模拟器/真机)创建完成。
1.2编写脚本
1.2.1模拟器
1、本章示例模拟器使用的是Genymotion,首先打开Genymotion模拟器,打开指定的Android版本。
2、首先获取模拟器设备标识,命令行输入命令 adb devices
如图所示,只查询到1台此模拟器,在脚本里可以不用添加此参数
capabilities.setCapability("udid", " 192.168.113.101:5555");
就可以指定此台模拟器执行。
如果是多台设备,如图所示,查询到2台(1台模拟器192.168.113.101:5555、1台真机MYV0215825000026),在脚本就要添加此参数
capabilities.setCapability("udid", "192.168.113.101:5555");
测试执行的时候来指定这台模拟器执行。
3、模拟器里没有要测试的应用程序,可以在执行自动化测试前先安装到模拟器里,输入安装命令 adb install -r 进行安装,或者使用手机助手进行安装,或者直接将.apk应用程序拖拽到模拟器上进行安装。
4、模拟器里没有要测试的应用程序,想在自动化测试执行的时候自动安装。则需要在脚本里添加如下代码:
File classpathRoot = new File(System.getProperty("user.dir"));
File appDir = new File(classpathRoot, "app");
File app = new File(appDir, "testApp.apk");
// `.ipa`或`.apk`文件所在的本地绝对路径或者远程路径,也可以是一个包括两者之一的`.zip`
// Appium会先尝试安装路径对应的应用在适当的真机或模拟器上
// 针对Android,如果你指定`app-package`和`app-activity`的话,那么就可以不指定`app`
// 例如/abs/path/to/my.apk or http://myapp.com/app.ipa
capabilities.setCapability("app", app.getAbsolutePath());
5、当模拟器里有要测试的应用程序,每次执行测试脚本可以不用安装被测应用,只要指定appPackage和appActivity就可以了。
6、接下来开始使用查找元素定位工具来获取元素的属性值等信息。例如使用Android SDK的uiautomatorviewer工具查找元素。
7、脚本代码:
package com.test.demo;
import java.io.File;
import java.net.URL;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
/**
* Android-原生-模拟器
*
* @author wangmcn
*
*/
public class Android_App_Simulator {
public static void main(String[] args) throws Exception {
AndroidDriverdriver;
File classpathRoot = new File(System.getProperty("user.dir"));
File appDir = new File(classpathRoot, "app");
File app = new File(appDir, "testApp.apk");
DesiredCapabilities capabilities = new DesiredCapabilities();
// 使用哪个自动化测试引擎
// 默认为Appium,或Selendroid或UiAutomator2或Espresso用于Android;或XCUITest用于IOS
capabilities.setCapability("automationName", "Appium");
// 使用哪个移动操作系统平台
// iOS, Android, FirefoxOS
capabilities.setCapability("platformName", "Android");
// 移动操作系统版本
capabilities.setCapability("platformVersion", "6.0");
// 使用的移动设备或模拟器的类型
// iPhone Simulator, iPad Simulator, iPhone Retina 4-inch, Android
// Emulator, Galaxy S4 等等
// 在IOS上,这个关键字的值必须是使用`instruments -s devices`得到的可使用的设备名称之一
// 在Android上,这个关键字目前不起作用
capabilities.setCapability("deviceName", "honor");
// 连接的物理设备的唯一设备标识
capabilities.setCapability("udid", "192.168.113.101:5555");
// `.ipa`或`.apk`文件所在的本地绝对路径或者远程路径,也可以是一个包括两者之一的`.zip`
// Appium会先尝试安装路径对应的应用在适当的真机或模拟器上
// 针对Android,如果你指定`app-package`和`app-activity`的话,那么就可以不指定`app`
// 例如/abs/path/to/my.apk or http://myapp.com/app.ipa
capabilities.setCapability("app", app.getAbsolutePath());
// 要运行Android应用的包名
capabilities.setCapability("appPackage", "com.example.testapp");
// 要从包中启动的Android activity的活动名称
capabilities.setCapability("appActivity", "com.example.testapp.MainActivity");
// 启用Unicode输入法,设置为true可以输入中文字符,默认为false
capabilities.setCapability("unicodeKeyboard", true);
// 在设定了`unicodeKeyboard`关键字运行Unicode测试结束后,将键盘重置为其原始状态
// 如果单独使用,将会被忽略,默认值`false`
capabilities.setCapability("resetKeyboard", true);
// 设置为true,每次启动时覆盖session,否则第二次运行会报错不能新建session
capabilities.setCapability("sessionOverride", true);
// 在此会话之前不要重置应用程序状态
// Android 不要停止应用程序,不要清除应用程序数据,也不要卸载apk
// IOS 测试后不要销毁或关闭SIM卡。开始测试运行在任何模拟运行,或设备插入
capabilities.setCapability("noReset", true);
// 执行完整的重置
// Android 停止应用程序,清除应用程序数据并在测试后卸载apk
// IOS 在真机设备测试后卸载应用程序,在模拟器测试后摧毁模拟器
capabilities.setCapability("fullReset", false);
// 设置命令超时时间,单位:秒
// 达到超时时间仍未接收到新的命令时Appium会假设客户端退出然后自动结束会话
capabilities.setCapability("newCommandTimeout", 60);
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
System.out.println("启动应用程序");
// 输入框输入百度首页
driver.findElement(By.id("com.example.testapp:id/urlField")).sendKeys("https://www.baidu.com/");
// 点击GO
driver.findElement(By.id("com.example.testapp:id/goButton")).click();
Thread.sleep(2000);
driver.quit();
}
}
1.2.2真机
1、首先获取真机设备标识,命令行输入命令 adb devices
2、真机设备里没有要测试的应用程序,可以在执行自动化测试前先安装到设备里,输入安装命令 adb install -r 进行安装,或者使用手机助手进行安装。
3、真机设备里没有要测试的应用程序,想在自动化测试执行的时候自动安装。则需要在脚本里添加如下代码:
File classpathRoot = new File(System.getProperty("user.dir"));
File appDir = new File(classpathRoot, "app");
File app = new File(appDir, "testApp.apk");
// `.ipa`或`.apk`文件所在的本地绝对路径或者远程路径,也可以是一个包括两者之一的`.zip`
// Appium会先尝试安装路径对应的应用在适当的真机或模拟器上
// 针对Android,如果你指定`app-package`和`app-activity`的话,那么就可以不指定`app`
// 例如/abs/path/to/my.apk or http://myapp.com/app.ipa
capabilities.setCapability("app", app.getAbsolutePath());
4、当真机设备里有要测试的应用程序,每次执行测试脚本可以不用安装被测应用,只要指定appPackage和appActivity就可以了。
5、接下来开始使用查找元素定位工具来获取元素的属性值等信息。例如使用Android SDK的uiautomatorviewer工具查找元素。
6、脚本代码:
package com.test.demo;
import java.io.File;
import java.net.URL;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.android.AndroidDriver;
import io.appium.java_client.android.AndroidElement;
/**
* Android-原生-真机
*
* @author wangmcn
*
*/
public class Android_App_RealMachine {
public static void main(String[] args) throws Exception {
AndroidDriverdriver;
File classpathRoot = new File(System.getProperty("user.dir"));
File appDir = new File(classpathRoot, "app");
File app = new File(appDir, "testApp.apk");
DesiredCapabilities capabilities = new DesiredCapabilities();
// 使用哪个自动化测试引擎
// 默认为Appium,或Selendroid或UiAutomator2或Espresso用于Android;或XCUITest用于IOS
capabilities.setCapability("automationName", "Appium");
// 使用哪个移动操作系统平台
// iOS, Android, FirefoxOS
capabilities.setCapability("platformName", "Android");
// 移动操作系统版本
capabilities.setCapability("platformVersion", "6.0");
// 使用的移动设备或模拟器的类型
// iPhone Simulator, iPad Simulator, iPhone Retina 4-inch, Android
// Emulator, Galaxy S4 等等
// 在IOS上,这个关键字的值必须是使用`instruments -s devices`得到的可使用的设备名称之一
// 在Android上,这个关键字目前不起作用
capabilities.setCapability("deviceName", "honor");
// 连接的物理设备的唯一设备标识
capabilities.setCapability("udid", "MYV0215825000026");
// `.ipa`或`.apk`文件所在的本地绝对路径或者远程路径,也可以是一个包括两者之一的`.zip`
// Appium会先尝试安装路径对应的应用在适当的真机或模拟器上
// 针对Android,如果你指定`app-package`和`app-activity`的话,那么就可以不指定`app`
// 例如/abs/path/to/my.apk or http://myapp.com/app.ipa
capabilities.setCapability("app", app.getAbsolutePath());
// 要运行Android应用的包名
capabilities.setCapability("appPackage", "com.example.testapp");
// 要从包中启动的Android activity的活动名称
capabilities.setCapability("appActivity", "com.example.testapp.MainActivity");
// 启用Unicode输入法,设置为true可以输入中文字符,默认为false
capabilities.setCapability("unicodeKeyboard", true);
// 在设定了`unicodeKeyboard`关键字运行Unicode测试结束后,将键盘重置为其原始状态
// 如果单独使用,将会被忽略,默认值`false`
capabilities.setCapability("resetKeyboard", true);
// 设置为true,每次启动时覆盖session,否则第二次运行会报错不能新建session
capabilities.setCapability("sessionOverride", true);
// 在此会话之前不要重置应用程序状态
// Android 不要停止应用程序,不要清除应用程序数据,也不要卸载apk
// IOS 测试后不要销毁或关闭SIM卡。开始测试运行在任何模拟运行,或设备插入
capabilities.setCapability("noReset", true);
// 执行完整的重置
// Android 停止应用程序,清除应用程序数据并在测试后卸载apk
// IOS 在真机设备测试后卸载应用程序,在模拟器测试后摧毁模拟器
capabilities.setCapability("fullReset", false);
// 设置命令超时时间,单位:秒
// 达到超时时间仍未接收到新的命令时Appium会假设客户端退出然后自动结束会话
capabilities.setCapability("newCommandTimeout", 60);
driver = new AndroidDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
System.out.println("启动应用程序");
// 输入框输入百度首页
driver.findElement(By.id("com.example.testapp:id/urlField")).sendKeys("https://www.baidu.com/");
// 点击GO
driver.findElement(By.id("com.example.testapp:id/goButton")).click();
Thread.sleep(2000);
driver.quit();
}
}
1.3执行脚本
1.3.1模拟器
1、开启Appium服务(任选一种即可)
方式一:开启Appium Server
打开命令行,输入 appium --address 127.0.0.1 --port 4723 --no-reset --session-override
如图所示,Appium服务开启。
方式二:开启Appium Desktop
打开Appium Desktop
如服务IP和端口默认的情况下,直接点击Start Server v1.6.5来开启Appium服务,如图所示。
2、执行测试脚本,鼠标右键Run As--->Java Application。
脚本执行步骤:
(1)打开testApp.apk应用程序
(2)输入框输入百度首页
(3)点击GO
(4)关闭应用程序
1.3.2真机
1、开启Appium服务(任选一种即可)
方式一:开启Appium Server
打开命令行,输入 appium --address 127.0.0.1 --port 4723 --no-reset --session-override
如图所示,Appium服务开启。
方式二:开启Appium Desktop
打开Appium Desktop
如服务IP和端口默认的情况下,直接点击Start Server v1.6.5来开启Appium服务,如图所示。
2、执行测试脚本,鼠标右键Run As--->Java Application。
脚本执行步骤:
(1)打开testApp.apk应用程序
(2)输入框输入百度首页
(3)点击GO
(4)关闭应用程序
1、启动Eclipse,鼠标右键New--->Project。
2、创建Java项目,选择Java目录下的Java Project。
3、输入项目名称(例如:My_Appium_Demo),点击Finish完成。
4、创建lib文件夹,用来存放jar包。把Appium Clients jar和Selenium jar包拷贝到文件夹里。
5、选中拷贝过来的Appium Clients jar和Selenium jar包,鼠标右键Build Path--->Add to Build Path。
6、Appium Clients jar和Selenium jar包已经被项目引用了。
7、选中src源文件夹,鼠标右键New--->Class,创建Java类,输入包名(例如:com.test.demo)、类名(例如:模拟器示例为IOS_App_Simulator、真机示例为IOS_App_RealMachine),点击Finish完成。
8、第一个Demo项目,IOS-原生(模拟器/真机)创建完成。
2.2编写脚本
2.2.1模拟器
1、使用Xcode创建模拟器,例如:本章示例模拟器名iPhone 8,IOS版本11.2。
2、关于测试的应用程序:
(1)如果是在模拟器上运行,需要装.app的应用程序文件。
要想在IOS模拟器中运行应用,则必须在Xcode中编译时选择模拟器类型,编译生成的文件后缀为.app
(2)如果是在真机上运行,需要装.ipa的应用程序文件。分为正式版和开发版。
正式版(已经发布到App Store上),可以直接在App Store上下载安装或者可以获取.ipa应用程序文件用命令安装到真机上。
开发版(没有发布到App Store上),只能获取.ipa应用程序文件,并且苹果开发者账号添加此真机的UDID,才可以用命令安装到此真机上。
3、本章示例使用的是模拟器,直接将.app应用程序拖拽到模拟器上进行安装即可。
4、在模拟器里测试应用程序,需要指定应用程序的bundleId,因为.app为测试版应用程序,所以bundleId可以询问开发人员提供。
例如:本章贝壳测试版应用bundleId为com.xiaoV.conchBeta。
// 被测应用的bundle ID
// 用于在真实设备中启动测试,也用于使用其他需要bundle ID的关键字启动测试
// 在使用bundle ID在真实设备上执行测试时,你可以不提供`app`关键字,但你必须提供`udid`
capabilities.setCapability("bundleId", "com.xiaoV.conchBeta");
5、接下来开始使用查找元素定位工具来获取元素的属性值等信息。例如使用Appium Desktop的Inspector工具查找元素。
首先打开Appium Desktop,点击Start Server v1.7.2来开启Appium服务。
点击放大镜(Start Inspector Session)。
输入Desired Capabilities相关参数信息。例如:
{
"platformName": "iOS",
"platformVersion": "11.2",
"deviceName": "iPhone 8",
"automationName": "XCUITest",
"bundleId": "com.xiaoV.conchBeta"
}
之后点击Start Session。
获取指定的元素信息。
6、脚本代码:
package com.test.demo;
import java.net.URL;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.ios.IOSDriver;
import io.appium.java_client.ios.IOSElement;
/**
* IOS-原生-模拟器
*
* @author wangmcn
*
*/
public class IOS_App_Simulator {
public static void main(String[] args) throws Exception {
IOSDriverdriver;
DesiredCapabilities capabilities = new DesiredCapabilities();
// 使用哪个自动化测试引擎
// 默认为Appium,或Selendroid或UiAutomator2或Espresso用于Android;或XCUITest用于IOS
capabilities.setCapability("automationName", "Appium");
// 使用哪个移动操作系统平台
// iOS, Android, FirefoxOS
capabilities.setCapability("platformName", "iOS");
// 移动操作系统版本
capabilities.setCapability("platformVersion", "11.2");
// 使用的移动设备或模拟器的类型
// iPhone Simulator, iPad Simulator, iPhone Retina 4-inch
// Android Emulator, Galaxy S4 等等
// 在IOS上,这个关键字的值必须是使用`instruments -s devices`得到的可使用的设备名称之一
// 在Android上,这个关键字目前不起作用
capabilities.setCapability("deviceName", "iPhone 8");
// 被测应用的bundle ID
// 用于在真实设备中启动测试,也用于使用其他需要bundle ID的关键字启动测试
// 在使用bundle ID在真实设备上执行测试时,你可以不提供`app`关键字,但你必须提供`udid`
capabilities.setCapability("bundleId", "com.xiaoV.conchBeta");
// 设置为true,每次启动时覆盖session,否则第二次运行会报错不能新建session
capabilities.setCapability("sessionOverride", true);
// 在此会话之前不要重置应用程序状态
// Android 不要停止应用程序,不要清除应用程序数据,也不要卸载apk
// IOS 测试后不要销毁或关闭SIM卡。开始测试运行在任何模拟运行,或设备插入
capabilities.setCapability("noReset", true);
// 执行完整的重置
// Android 停止应用程序,清除应用程序数据并在测试后卸载apk
// IOS 在真机设备测试后卸载应用程序,在模拟器测试后摧毁模拟器
capabilities.setCapability("fullReset", false);
// 设置命令超时时间,单位:秒
// 达到超时时间仍未接收到新的命令时Appium会假设客户端退出然后自动结束会话
capabilities.setCapability("newCommandTimeout", 60);
// 当IOS的个人信息访问警告(如:位置、联系人、图片)出现时,自动选择接受(Accept),默认值`false`
capabilities.setCapability("autoAcceptAlerts", false);
driver = new IOSDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
System.out.println("启动贝壳应用程序");
Thread.sleep(5000);
// 点击马上借钱
driver.findElement(By.name("马上借钱")).click();
Thread.sleep(2000);
driver.quit();
}
}
2.2.2真机
1、首先获取真机udid设备标识,终端输入 idevice_id -l
如图所示:显示该真机的udid信息。
2、关于测试的应用程序:
(1)如果是在模拟器上运行,需要装.app的应用程序文件。
要想在IOS模拟器中运行应用,则必须在Xcode中编译时选择模拟器类型,编译生成的文件后缀为.app
(2)如果是在真机上运行,需要装.ipa的应用程序文件。分为正式版和开发版。
正式版(已经发布到App Store上),可以直接在App Store上下载安装或者可以获取.ipa应用程序文件用命令安装到真机上。
开发版(没有发布到App Store上),只能获取.ipa应用程序文件,并且苹果开发者账号添加此真机的UDID,才可以用命令安装到此真机上。
3、本章示例使用的是真机,测试正式版微博应用(真机通过访问App Store下载微博应用安装即可)。
4、获取应用程序的bundleId,打开终端,输入 ideviceinstaller -l
如图所示:本章示例微博应用的bundleId为com.sina.weibo。
// 被测应用的bundle ID
// 用于在真实设备中启动测试,也用于使用其他需要bundle ID的关键字启动测试
// 在使用bundle ID在真实设备上执行测试时,你可以不提供`app`关键字,但你必须提供`udid`
capabilities.setCapability("bundleId", "com.sina.weibo");
5、接下来开始使用查找元素定位工具来获取元素的属性值等信息。例如使用Appium Desktop的Inspector工具查找元素。
首先打开Appium Desktop,点击Start Server v1.6.5来开启Appium服务。
点击放大镜(Start Inspector Session)。
输入Desired Capabilities相关参数信息。例如:
{
"platformName": "iOS",
"platformVersion": "11.1",
"deviceName": "test",
"automationName": "XCUITest",
"bundleId": "com.sina.weibo",
"udid": "c5dc675bddf7d1ac6d91783d5224d72b427f8d04"
}
之后点击Start Session。
获取指定的元素信息。
6、脚本代码:
package com.test.demo;
import java.net.URL;
import org.openqa.selenium.By;
import org.openqa.selenium.remote.DesiredCapabilities;
import io.appium.java_client.ios.IOSDriver;
import io.appium.java_client.ios.IOSElement;
/**
* IOS-原生-真机
*
* @author wangmcn
*
*/
public class IOS_App_RealMachine {
public static void main(String[] args) throws Exception {
IOSDriverdriver;
DesiredCapabilities capabilities = new DesiredCapabilities();
// 使用哪个自动化测试引擎
// 默认为Appium,或Selendroid或UiAutomator2或Espresso用于Android;或XCUITest用于IOS
capabilities.setCapability("automationName", "Appium");
// 使用哪个移动操作系统平台
// iOS, Android, FirefoxOS
capabilities.setCapability("platformName", "iOS");
// 移动操作系统版本
capabilities.setCapability("platformVersion", "11.1");
// 使用的移动设备或模拟器的类型
// iPhone Simulator, iPad Simulator, iPhone Retina 4-inch
// Android Emulator, Galaxy S4 等等
// 在IOS上,这个关键字的值必须是使用`instruments -s devices`得到的可使用的设备名称之一
// 在Android上,这个关键字目前不起作用
capabilities.setCapability("deviceName", "test");
// 连接的物理设备的唯一设备标识
capabilities.setCapability("udid", "c5dc675bddf7d1ac6d91783d5224d72b427f8d04");
// 被测应用的bundle ID
// 用于在真实设备中启动测试,也用于使用其他需要bundle ID的关键字启动测试
// 在使用bundle ID在真实设备上执行测试时,你可以不提供`app`关键字,但你必须提供`udid`
capabilities.setCapability("bundleId", "com.sina.weibo");
// 设置为true,每次启动时覆盖session,否则第二次运行会报错不能新建session
capabilities.setCapability("sessionOverride", true);
// 在此会话之前不要重置应用程序状态
// Android 不要停止应用程序,不要清除应用程序数据,也不要卸载apk
// IOS 测试后不要销毁或关闭SIM卡。开始测试运行在任何模拟运行,或设备插入
capabilities.setCapability("noReset", true);
// 执行完整的重置
// Android 停止应用程序,清除应用程序数据并在测试后卸载apk
// IOS 在真机设备测试后卸载应用程序,在模拟器测试后摧毁模拟器
capabilities.setCapability("fullReset", false);
// 设置命令超时时间,单位:秒
// 达到超时时间仍未接收到新的命令时Appium会假设客户端退出然后自动结束会话
capabilities.setCapability("newCommandTimeout", 60);
// 当IOS的个人信息访问警告(如:位置、联系人、图片)出现时,自动选择接受(Accept),默认值`false`
capabilities.setCapability("autoAcceptAlerts", false);
driver = new IOSDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
System.out.println("启动微博应用程序");
Thread.sleep(5000);
// 点击发现
driver.findElement(By.name("发现")).click();
Thread.sleep(5000);
driver.quit();
}
}
2.3执行脚本
2.3.1模拟器
1、开启Appium服务(任选一种即可)
方式一:开启Appium Server
打开终端,输入 appium --address 127.0.0.1 --port 4723 --no-reset --session-override
如图所示,Appium服务开启。
方式二:开启Appium Desktop
打开Appium Desktop
如服务IP和端口默认的情况下,直接点击Start Server v1.7.2来开启Appium服务,如图所示。
2、执行测试脚本,鼠标右键Run As--->Java Application。
脚本执行时,Appium Desktop或Appium Server自动将WDA(WebDriverAgent)安装到模拟器上。
脚本执行步骤:
(1)打开贝壳应用程序
(2)点击马上借钱
(3)关闭贝壳应用程序
2.3.2真机
1、开启Appium服务(任选一种即可)
方式一:开启Appium Server
打开终端,输入 appium --address 127.0.0.1 --port 4723 --no-reset --session-override
如图所示,Appium服务开启。
方式二:开启Appium Desktop
打开Appium Desktop
如服务IP和端口默认的情况下,直接点击Start Server v1.6.5来开启Appium服务,如图所示。
2、执行测试脚本,鼠标右键Run As--->Java Application。
脚本执行步骤:
(1)打开微博应用程序
(2)点击发现
(3)关闭微博应用程序
本文分享自 AllTests软件测试 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!