【发布时间】:2015-11-17 16:41:41
【问题描述】:
以下是 android 应用的 UI。在此,可以看到好友列表的 UI。它总共有26个朋友。我想滚动 UI 并希望看到所有的朋友。 我想通过 Python-Appium 来做到这一点。我无法滚动它。怎么做?它有资源 ID、类名、包名,我有边界值,即 [0,161][540,887]。
【问题讨论】:
以下是 android 应用的 UI。在此,可以看到好友列表的 UI。它总共有26个朋友。我想滚动 UI 并希望看到所有的朋友。 我想通过 Python-Appium 来做到这一点。我无法滚动它。怎么做?它有资源 ID、类名、包名,我有边界值,即 [0,161][540,887]。
【问题讨论】:
我有同样的问题。大多数建议的解决方案都不起作用。无论如何,我找到了一个解决方案,您可以在下面看到:
# import touch events
from appium.webdriver.common.touch_action import TouchAction
# Find the list element.
list = driver.find_element_by_id('com.abc.android.abc:id/common_tab_list')
# define touch
action = TouchAction(driver)
# adjust here to your needs !
for x in range(0,10):
action.press(x=750,y=1750).move_to(x=0, y=-75).perform()
主要部分是 for 循环。基本上它垂直滚动10次。您可能需要提供不同的 x 和 y 坐标。当您在设备上启用“指针位置”时,您可以轻松找到这一点。当您触摸屏幕时,这将显示 x 和 y 坐标。要启用它,只需转到
然后触摸设备底部,您将在顶部看到坐标。您可以将其添加到“action.press(x=yourX, y=yourY)....”
move_to() - 因为你想要垂直滚动让 x 保持原样。 y 有负数。负数意味着我们实际上是向上滚动而不是向下滚动。
perfrom() 是执行。不多说了。
现在我想再添加 1 件事。您可以执行以下操作,而不是 for 循环:
action.press(x=750,y=1750).move_to(x=0, y=-200).release().perform()
注意到不同了吗?它是释放()。当您添加此内容时,我发现列表将平滑滚动。就像当你向上滑动时,列表有一些惯性。
我不是专家,但我的回答至少应该对您有所帮助。 祝你好运
【讨论】:
可滚动区域应标记为“可滚动”。你可以使用 Android UIAutomator 和 UiScrollable 来解决这个问题。
user_scroll = 'new UiScrollable(new UiSelector().scrollable(true).' +
'instance(0)).scrollIntoView(new UiSelector().text("user-text").instance(0))'
user = self.driver.find_element_by_android_uiautomator(user_scroll)
我们正在做的是选择我们关心的滚动区域。使用它,我们滚动到特定元素。在这种情况下,我们滚动到包含某些特定文本的元素。
如果您想一次滚动到每个用户,那么每次为 UiSelector ".text" 使用不同的实例应该很容易迭代。如果您只想滚动到底部用户,您可以搜索那里的用户。
【讨论】:
我使用 TouchAction 让它工作的唯一方法是:
ta = TouchAction(driver)
ta.tap(x=100, y=200).wait(100).move_to(x=100, y=80).wait(100).release()
ta.perform()
没有这些等待,Iphone 就会发疯。
【讨论】: