下にスクロールしてAndroid appiumおよびjavaを使用して)の要素をクリックする方法を教えてください。
「Android.support.v7.widget.RecyclerView
」内の要素のリストを持っています。 10個を超える要素があるため、画面をスワイプして以下の要素を表示する必要があります。各要素は "com.osanda.exampleapp/textViewTitle
"である同じIDを持っています。しかし、彼らのテキストは「アップル」、「オレンジ」、「ブドウ」のように異なります......
必要なのは、テキストを使用して関連する要素をスクロールしてクリックすることだけです( "Apple"、 "Orange"、 "Grapes" .....)
私は多くのチュートリアルに従ってきましたが、正しく行うことができませんでした。私はなんとか画面をスクロールダウンしました。ただし、要素がスクロールの中央の位置にある場合は機能しません。
要素名をリストすると、すべての要素ではなく、表示されている要素のみが表示されます。
List<WebElement> elements = androidDriver.findElementByClassName("Android.support.v7.widget.RecyclerView").findElements(By.id("com.osanda.exampleapp:id/textViewTitle"));
for(WebElement element : elements) {
System.out.println(element.getText());
}
ありがとうございました。
これでうまくいきました。
public void scrollAndClick(String visibleText) {
androidDriver.findElementByAndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().textContains(\""+visibleText+"\").instance(0))").click();
}
}
Appiumの新しいバージョンでは、これを使用できます。
TouchActions action = new TouchActions(driver);
action.scroll(element, 10, 100);
action.perform();
element.click();
以下のコードを使用してください。テキストが表示されるまでスクロールします。
String uiSelector = "new UiSelector().textMatches(\"" + text
+ "\")";
String command = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView("
+ uiSelector + ");";
driver.findElementByAndroidUIAutomator(command);
これで、クリックアクションを実行できます。
_public AndroidElement ScrollToElement(String by, String using) {
AndroidElement element = null;
int numberOfTimes = 10;
Dimension size = driver.manage().window().getSize();
int anchor = (int) (size.width / 2);
// Swipe up to scroll down
int startPoint = (int) (size.height - 10);
int endPoint = 10;
for (int i = 0; i < numberOfTimes; i++) {
try {
new TouchAction(driver)
.longPress(point(anchor, startPoint))
.moveTo(point(anchor, endPoint))
.release()
.perform();
element = (AndroidElement) driver.findElement(by, using);
i = numberOfTimes;
} catch (NoSuchElementException ex) {
System.out.println(String.format("Element not available. Scrolling (%s) times...", i + 1));
}
}
return element;
}
_
テストでは次のように使用します。例:String usingWebView = “//Android.widget.TextView[@text=‘Spinner’]”; String by = “xpath”; MobileActions mbAct = new MobileActions(driver); //This is just a class which has above function code. AndroidElement webViewElement = mbAct.ScrollToElement(by, usingWebView, 250); webViewElement.click();
以下のwhileループを使用して、期待される要素が表示されるまで画面を下にスワイプして包含を探します
While (driver.findElements(By.id(“id”)).size()==0){
size = driver.manage().window().getSize();
int starty = (int) (size.height * 0.80);
int endy = (int) (size.height * 0.20);
int startx = size.width / 2;
System.out.println("starty = " + starty + " ,endy = " + endy + " , startx = " + startx);
driver.swipe(startx, starty, startx, endy, 3000);
Thread.sleep(2000);
driver.swipe(startx, endy, startx, starty, 3000);
Thread.sleep(2000);
}
終了時に要素が検出されたら、アクションを実行できます。
findElementByAndroidUIAutomator--AndroidUiAutomater
は最新リリースでは非推奨です。
一方、動作しているコードは次のようになります
MobileElement element = driver.findElement(MobileBy.AndroidUIAutomator(
"new UiScrollable(new UiSelector().resourceId(\"com.Android.vending:id/tab_recycler_view\")).getChildByText("
+ "new UiSelector().className(\"Android.widget.TextView\"), \"Games We Are Playing\")"));
//Perform the action on the element
element.click();