如何在Python中使用Appium滚动
你好,我想知道如何在Appium中使用Python进行滚动。
我之前在Java中做过这个,效果很好。
driver.scrollTo("Destination");
不过我在Python中似乎做不到同样的事情。我对Python还比较陌生,尝试了很多种方法来滚动。
我尝试的第一种方法是
el1 = self.driver.find_element_by_name('Starting')
el2 = self.driver.find_element_by_name('Ending')
self.driver.scroll(el1, el2)
我尝试的第二种方法是
self.driver.find_element_by_android_uiautomator('new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text("DesinationText").instance(0));').
第二种方法滚动了一次,但没有完全滚到底,所以出现了NoSuchElementException的错误。
另外,有人能解释一下UiSelector中的实例是什么吗?我看了描述,但没太明白。
实例:设置搜索条件,通过实例编号来匹配小部件。
3 个回答
instance(i) 就像 index(i),但不知道为什么效果更好。
那它有什么用呢?假设在当前的活动中(也就是现在屏幕上显示的内容),有10个 TextView 视图。在这种情况下,下面这个选择器:
new UiSelector().className("android.widget.TextView")
可以很好地匹配到我们屏幕上所有的10个 TextView 视图,但如果你不明确指定想要匹配哪个实例或索引,它默认会返回第一个。
但是,假设你想专门匹配第10个 TextView,只需使用下面这个选择器:
new UiSelector().className("android.widget.TextView").instance(10)
你写的代码很好,而且是有效的。我还加了一些处理错误的示例:
def scroll_to_text(text):
try:
element = driver.find_element_by_android_uiautomator(
'new UiScrollable(new UiSelector().scrollable(true).instance(0)).scrollIntoView(new UiSelector().text("'+text+'").instance(0));')
return element
except NoSuchElementException:
logger.error('it was not found')
return None
except Exception, e:
logger.error("Unexpected error:")
logger.exception(e)
return None
所以我想你遇到的问题和你最初想的不同。请注意:
- new UiSelector().text("DesinationText") 会尝试匹配一个文本完全是 "DesinationText" 的元素。如果这个文本是更大文本的一部分,它就不会被匹配。
- 你代码中的 'new UiScrollable(new UiSelector().scrollable(true).instance(0)' 假设当前屏幕上只有一个可滚动的元素。也许你有两个列表视图,而文本在另一个列表视图或者其他可滚动的项目中?
希望这些对你有帮助。
Gil.
虽然使用坐标不是最好的解决办法,但目前对我来说还是有效的,所以我选择了它。
action = TouchAction(self.driver)
el = WebDriverWait(self.driver, 10).until(EC.presence_of_element_located((By.NAME, loc)))
action.press(el).move_to(x=10, y=-500).release().perform()
self.driver.scroll(el1, el2)
对我来说也不管用。
我开始使用
self.driver.swipe(470, 1400, 470, 1000, 400)
driver.swipe(start_x, start_y, end_x, end_y, duration)
这个方法会在 _touch.py 文件中找到。
慢慢向下滑动,添加一个逻辑来检查元素是否存在 - 直到找到这个元素为止。