Как написать автоматические тесты для действия, отличного от первого действия в Android Studio для Java, используя Appium
Я собираюсь написать автоматизированные тесты для моего приложения для Android, используя Appium в Ubuntu Linux, используя Android Studio IDE.
Appium устанавливается и настраивается с помощью Android Studio. У меня есть MainActivity, которая решает, вошел ли пользователь в систему. Перенести пользователя на главный экран, иначе перевести пользователя на WelcomeActivity, в котором есть параметры входа.
Я написал тесты для WelcomeActivity просто за нажатие кнопки, и все работает отлично, и тесты пройдены после запуска приложения на эмуляторе Appium и Sellinium. Вот код для тестов пользовательского интерфейса WelcomeActivity
public class WelcomeActivityUITests {
WebDriver driver;
@Before
public void setUp() throws MalformedURLException {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName", "Emulator Nexus_4_API_22 Android 5.1.1, API 22");
capabilities.setCapability(CapabilityType.PLATFORM, "Android");
capabilities.setCapability(CapabilityType.VERSION, "5.1.1");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("appPackage", "com.my.app");
capabilities.setCapability("appActivity", ".activities.WelcomeActivity");
driver = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
}
@Test
public void testEmailLoginButton() {
By loginButtonId = By.id(Constant.APP_PACKAGE + "email_signin_button");
RemoteWebElement loginButton = (RemoteWebElement) driver.findElement(loginButtonId);
loginButton.click();
driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
}
@After
public void End() {
driver.quit();
}
}
Этот тестовый класс работает нормально, когда я бегу из Android Studio и тестовые проходы.
Теперь я хочу написать тесты для другого занятия. Это имя AnotherActivity, и оно появляется после входа в систему.
Код для этого класса тестов:
public class AnotherActivityUITests {
WebDriver driver;
@Before
public void setUp() throws MalformedURLException {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName", "Emulator Nexus_4_API_22 Android 5.1.1, API 22");
capabilities.setCapability(CapabilityType.PLATFORM, "Android");
capabilities.setCapability(CapabilityType.VERSION, "5.1.1");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("appPackage", "com.my.app");
capabilities.setCapability("appActivity", ".activities.AnotherActivity");
driver = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
}
@Test
public void test() {
System.out.println("driver.getPageSource(): " + driver.getPageSource());
driver.manage().timeouts().implicitlyWait(30,TimeUnit.SECONDS);
}
@After
public void End() {
driver.quit();
}
}
Теперь, когда я запускаю этот тестовый класс. Это дает ошибку:
org.openqa.selenium.WebDriverException: при обработке команды произошла неизвестная ошибка на стороне сервера. Исходная ошибка: не удается запустить приложение com.my.app. Исходная ошибка: имя действия ".activities.AnotherActivity:", использованное для запуска приложения, не существует или не может быть запущено! Убедитесь, что он существует и является активностью запуска (ВНИМАНИЕ: сервер не предоставил никакой информации о трассировке стека)
Я не понимаю этого. что первые тесты активности работают нормально. Второе действие - это проблема. Я также пытаюсь дать другим именам действий, таким как LoginActivity, чтобы проверить, запускает ли он тест или нет. Не найти успеха.
Пожалуйста, объясните мне, как этого добиться. Где я не прав.
1 ответ
Вместо использования appActivity для каждого действия вы можете использовать MainActivity в качестве appActivity. Затем вам нужно проверить, в какую деятельность входит приложение, то есть welcomeActivity или AnotherActivity.
@Before
public void setUp() throws MalformedURLException {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability("deviceName", "Emulator Nexus_4_API_22 Android 5.1.1, API 22");
capabilities.setCapability(CapabilityType.PLATFORM, "Android");
capabilities.setCapability(CapabilityType.VERSION, "5.1.1");
capabilities.setCapability("platformName", "Android");
capabilities.setCapability("appPackage", "com.my.app");
//put your main activity below-----------------------------------//
capabilities.setCapability("appActivity", "Your main activity here");
//---------------------------------------------------------------//
driver = new RemoteWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
}
затем вы можете проверить, какое действие будет выполнено, проверив элемент вашего атрибута welcomeActivity или AnotherActivity.
By loginButtonId = By.id(Constant.APP_PACKAGE + "email_signin_button");
RemoteWebElement loginButton = (RemoteWebElement) driver.findElement(loginButtonId);
try{
if(loginButton.isDisplayed()){
//your test for welcomePage
}
}catch(Exception e){
//your test for Another Activity
}