提交 2585bba4 编写于 作者: S Sergey Tikhomirov

Additional changes of the #473: improvements of FingerPrintTest

上级 0a3f4633
...@@ -16,7 +16,9 @@ ...@@ -16,7 +16,9 @@
package io.appium.java_client.android; package io.appium.java_client.android;
import static io.appium.java_client.MobileBy.AndroidUIAutomator;
import static java.util.concurrent.TimeUnit.SECONDS; import static java.util.concurrent.TimeUnit.SECONDS;
import static org.openqa.selenium.By.id;
import io.appium.java_client.remote.MobileCapabilityType; import io.appium.java_client.remote.MobileCapabilityType;
import io.appium.java_client.service.local.AppiumDriverLocalService; import io.appium.java_client.service.local.AppiumDriverLocalService;
...@@ -26,20 +28,21 @@ import org.junit.Assert; ...@@ -26,20 +28,21 @@ import org.junit.Assert;
import org.junit.Before; import org.junit.Before;
import org.junit.BeforeClass; import org.junit.BeforeClass;
import org.junit.Test; import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException; import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.remote.DesiredCapabilities; import org.openqa.selenium.remote.DesiredCapabilities;
/**
* It is necessary to make this test passing
* - emulator API Level 23 Nexus device
* - perform 'adb emu finger touch' 1 on Windows
*/
public class FingerPrintTest { public class FingerPrintTest {
private static final String PASSWORD_INPUT_ID = "com.android.settings:id/password_entry";
private static final String FIRST_IN_LIST_XPATH = "//android.widget.ListView[1]/android.widget.LinearLayout[1]";
private static AppiumDriverLocalService service; private static AppiumDriverLocalService service;
private static AndroidDriver<AndroidElement> driver;
private static void initDriver() {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
capabilities.setCapability("appPackage", "com.android.settings");
capabilities.setCapability("appActivity", "Settings");
driver = new AndroidDriver<>(service.getUrl(), capabilities);
driver.manage().timeouts().implicitlyWait(15, SECONDS);
}
/** /**
* initialization. * initialization.
...@@ -62,44 +65,59 @@ public class FingerPrintTest { ...@@ -62,44 +65,59 @@ public class FingerPrintTest {
} }
} }
private AndroidElement findElementByText(String text) {
return driver.findElements(id("android:id/title")).stream().filter(androidElement ->
text.equals(androidElement.getText())).findFirst()
.orElseThrow(() ->
new NoSuchElementException(String.format("There is no element with the text '%s'", text)));
}
private void clickNext() {
driver.findElementById("com.android.settings:id/next_button").click();
}
private void clickOKInPopup() {
driver.findElementById("android:id/button1").click();
}
private void enterPasswordAndContinue() {
driver.findElementById("com.android.settings:id/password_entry")
.sendKeys("1234\n");
}
private void clickOnSecurity() {
driver.findElement(AndroidUIAutomator("new UiScrollable(new UiSelector()"
+ ".scrollable(true)).scrollIntoView("
+ "new UiSelector().text(\"Security\"));")).click();
}
/** /**
* enable system security which is required for finger print activation. * enable system security which is required for finger print activation.
*/ */
@Before public void before() throws Exception { @Before public void before() throws Exception {
final AndroidDriver driver = getAndroidDriver("ChooseLockGeneric"); initDriver();
// clicking the pin lock mode clickOnSecurity();
driver.findElement(By.xpath("//android.widget.LinearLayout[4]")).click(); findElementByText("Screen lock").click();
try { findElementByText("PIN").click();
// line below will throw exception if secure startup window is popped up enterPasswordAndContinue();
driver.findElementById(PASSWORD_INPUT_ID); enterPasswordAndContinue();
} catch (NoSuchElementException e) { clickNext();
// in secure startup window
driver.findElementById("com.android.settings:id/encrypt_require_password").click();
SECONDS.sleep(2);
clickOKInPopup(driver);
clickNext(driver);
}
enterPasswordAndContinue(driver);
enterPasswordAndContinue(driver);
clickNext(driver);
driver.quit();
} }
/** /**
* add a new finger print to security. * add a new finger print to security.
*/ */
@Test public void pressKeyCodeTest() throws InterruptedException { @Test public void fingerPrintTest() {
final AndroidDriver driver = getAndroidDriver(".fingerprint.FingerprintSettings"); findElementByText("Fingerprint").click();
enterPasswordAndContinue(driver); clickNext();
// click add fingerprint enterPasswordAndContinue();
driver.findElementByXPath(FIRST_IN_LIST_XPATH).click(); clickNext();
driver.fingerPrint(2); driver.fingerPrint(2);
try { try {
clickNext(driver); driver.findElementById("com.android.settings:id/next_button").click();
} catch (Exception e) { } catch (Exception e) {
Assert.fail("fingerprint command fail to execute"); Assert.fail("fingerprint command fail to execute");
} finally {
driver.quit();
} }
} }
...@@ -107,32 +125,16 @@ public class FingerPrintTest { ...@@ -107,32 +125,16 @@ public class FingerPrintTest {
* disabling pin lock mode. * disabling pin lock mode.
*/ */
@After public void after() throws InterruptedException { @After public void after() throws InterruptedException {
final AndroidDriver driver = getAndroidDriver("ChooseLockGeneric");
enterPasswordAndContinue(driver);
driver.findElementByXPath(FIRST_IN_LIST_XPATH).click();
clickOKInPopup(driver);
driver.quit(); driver.quit();
}
private static AndroidDriver getAndroidDriver(String activity) {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Android Emulator");
capabilities.setCapability("appPackage", "com.android.settings");
capabilities.setCapability("appActivity", activity);
AndroidDriver<AndroidElement> driver = new AndroidDriver<AndroidElement>(service.getUrl(), capabilities);
driver.manage().timeouts().implicitlyWait(15, SECONDS);
return driver;
}
private void enterPasswordAndContinue(AndroidDriver driver) throws InterruptedException { initDriver();
driver.findElementById(PASSWORD_INPUT_ID).sendKeys("1234\n"); clickOnSecurity();
}
private void clickNext(AndroidDriver driver) throws InterruptedException { findElementByText("Screen lock").click();
driver.findElementById("com.android.settings:id/next_button").click();
}
private void clickOKInPopup(AndroidDriver driver) throws InterruptedException { enterPasswordAndContinue();
driver.findElementById("android:id/button1").click(); findElementByText("None").click();
clickOKInPopup();
driver.quit();
} }
} }
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册