我想知道如何向下滚动以使用appium和java单击Android中的元素?
我在“android.support.v7.widget.RecyclerView
”中有一个元素列表。由于它有10个以上的元素,我们需要滑动屏幕才能看到下面的元素。
每个元素都具有相同的id,即“com.osanda.exampleapp/textViewTitle
”。但他们的文字不同,如“Apple”,“Orange”,“Grapes”......
我只需要滚动并点击相关元素的文字(“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());
}
谢谢。
答案 0 :(得分:5)
这对我有用。
public void scrollAndClick(String visibleText) {
androidDriver.findElementByAndroidUIAutomator("new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().textContains(\""+visibleText+"\").instance(0))").click();
}
}
答案 1 :(得分:2)
请使用以下代码。它将滚动直到文本可见。
String uiSelector = "new UiSelector().textMatches(\"" + text
+ "\")";
String command = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView("
+ uiSelector + ");";
driver.findElementByAndroidUIAutomator(command);
现在您可以在此之后执行点击操作。
答案 2 :(得分:2)
在新版本的Appium中,您可以使用此功能:
TouchActions action = new TouchActions(driver);
action.scroll(element, 10, 100);
action.perform();
element.click();
答案 3 :(得分:0)
SELECT u.first_name, u.last_name, u.id, ud.profile_pic, c.*,cm.* FROM
chat_master cm
LEFT JOIN chat c ON c.thread_id=cm.thread_id
LEFT JOIN users u ON u.id = cm.msg_to_id
LEFT JOIN user_details ud ON ud.id = u.id
WHERE cm.msg_from_id='$myID' GROUP BY c.thread_id ORDER BY c.datentime DESC
在最新版本中已贬值,
正在运行的代码现在看起来像
findElementByAndroidUIAutomator--AndroidUiAutomater
答案 4 :(得分:0)
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();
答案 5 :(得分:0)
使用下面的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);
}
一旦退出时检测到您的元素,您就可以执行操作。
答案 6 :(得分:0)
这对我有用,当文本可见时滚动将停止。这里我的文字是:“进度条”,只需根据您的文字替换即可。它会起作用。
String scrollElement = "new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text(\"Progress Bar\").instance(0))";
driver.findElementByAndroidUIAutomator(scrollElement).click();