如何在 Python 中使用 appium 进行滚动
Posted
技术标签:
【中文标题】如何在 Python 中使用 appium 进行滚动【英文标题】:How to scroll using appium in Python 【发布时间】:2014-12-26 23:10:42 【问题描述】:您好,我想知道如何使用 python 在 appium 中滚动
我以前用 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 中有哪些实例吗? 看了说明还是不太明白
实例:设置搜索条件以通过实例编号匹配小部件。
【问题讨论】:
@Ganwk ,您的 UI 自动查询应该具有滚动视图中的任何一种,例如 listview、gridview 或 recyclerview。请查看此视频,其中包含 appium 1.5.3 版本命令:youtube.com/watch?v=bT3tqaLNn-Y 【参考方案1】:我最终使用了坐标,尽管它目前不是最适合我的解决方案
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()
【讨论】:
负值对你有用吗?因为当给出负 y 轴时我得到The coordinates provided to an interactions operation are invalid.
【参考方案2】:
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 文件中可用
慢慢向下滑动,添加一个逻辑来检查元素是否存在 - 继续直到找到元素。
【讨论】:
【参考方案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)' 在您的代码中
假设当前只有一个可滚动元素
屏幕。也许你有两个列表视图,文本在另一个
listview 或任何其他可滚动项?
希望这会有所帮助。 吉尔。
【讨论】:
以上是关于如何在 Python 中使用 appium 进行滚动的主要内容,如果未能解决你的问题,请参考以下文章
Appium python自动化测试系列之等待函数如何进行实战