[英]Appium - Native Android Application - Scrolling (Java)
我正在嘗試使用Appium在Android上進行自動化測試。 這是我的代碼。
public class TestAndroidRealDevice {
private static AndroidDriver wd;
Dimension size;
@Before
public void setUp() throws Exception {
DesiredCapabilities capabilities = new DesiredCapabilities();
capabilities.setCapability(MobileCapabilityType.APPIUM_VERSION, "1.6.4-beta.2");
capabilities.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
capabilities.setCapability(MobileCapabilityType.PLATFORM_VERSION, "6.0.1");
capabilities.setCapability(MobileCapabilityType.DEVICE_NAME, "Samsung Galaxy S6");
capabilities.setCapability(MobileCapabilityType.AUTOMATION_NAME, "Appium");
capabilities.setCapability(MobileCapabilityType.FULL_RESET, true);
capabilities.setCapability(MobileCapabilityType.APP, "/Users/app-t3st-release.apk");
wd = new AndroidDriver(new URL("http://0.0.0.0:4723/wd/hub"), capabilities);
wd.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
Thread.sleep(3000);
}
@Test
public void loginTest() throws Exception {
WebElement login = wd.findElement(By.id("proceedBtn"));
login.click();
wd.findElement(By.id("customerBigBtn")).click();
wd.findElement(By.id("haveAPassAlreadyBtn")).click();
wd.findElement(By.id("countrySpinnerContainer")).click();
for (int i=0; i<4; i++)
{
Thread.sleep(2000);
if (wd.findElement(By.xpath("//android.widget.ListView[contains(text(), 'Poland (+48)')]")).isDisplayed()) {
wd.findElement(By.xpath("//android.widget.ListView[contains(text(), 'Poland (+48)')]")).click();
break;
}
else
{
do {
horizontalScroll();
} while (wd.findElement(By.xpath("//android.widget.ListView[contains(text(), 'Poland (+48)')]")).isDisplayed());
}
}
}
public void horizontalScroll()
{
WebElement el = wd.findElementByClassName("android.widget.ListView");
el.getSize();
int x_start=(int)(size.width*0.60);
int x_end=(int)(size.width*0.30);
int y=130;
wd.swipe(x_start,y,x_end,y,4000);
}
@After
public void tearDown () throws Exception {
wd.quit();
}
執行此命令后,我的測試將失敗。
wd.findElement(By.id("customerBigBtn")).click();
wd.findElement(By.id("haveAPassAlreadyBtn")).click();
wd.findElement(By.id("countrySpinnerContainer")).click();enter code here
在該屏幕上,我有一個下拉菜單,我想在其中找到並選擇特定的國家。 為此,我應該滾動(滑動)下拉菜單-直到在屏幕上看到我的國家(我想從列表中選擇)。
但是,不幸的是,這里有問題;(
但是我收到一個錯誤,我無法使用提供的策略找到元素,並且如果沒有任何滾動操作來找到該元素,我的測試就會失敗。
有任何想法嗎? 我應該改變什么? 謝謝。
嘗試滾動到所需的元素:
MobileElement listItem = list
.findElement(MobileBy
.AndroidUIAutomator("new UiScrollable(new UiSelector()).scrollIntoView("
+ "new UiSelector().text(\"listItem text\"));"));
如果元素不可見,則顯示將拋出異常。
如果我們要檢查元素是否在頁面上可用,則必須使用findElements,然后使用其大小。 如下所示
driver.findElements(byVal).size() != 0
如果size不等於零,則表示它在頁面上可用,我們可以檢查isDisplayed以了解該元素的可見性。
因此,嘗試在for (int i=0; i<4; i++)
的位置編寫如下代碼
do {
List<WebElement> allOptions = wd.findElements(By.xpath("//android.widget.ListView"));
for (WebElement webElement : allOptions) {
if (webElement.getText().contains("Poland")) {
webElement.click();
flag = true;
break;
}
}
if (!flag) {
horizontalScroll();
}
} while (!flag);
這適用於肯定的情況,如果您也想處理否定的情況(下拉菜單中不提供的給定選項),則根據需要更新代碼
讓我知道它是否有效或您遇到任何問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.