android - webdriver python 的触摸事件示例?

标签 android python selenium webdriver

我看过大约 100 个 touch event examples for the Java webdriver在线,但没有一个用于 python。 有人会好心在这里张贴一个,这样可以节省人们很多小时的搜索时间吗? 这是我尝试对 android 模拟器中的元素执行基本的 double_tap 以放大它。非常感谢

编辑:感谢 Julian 的帮助,我找到了缺失的链接:出于某种原因,触摸操作最后需要一个额外的 .perform()。下面你会发现一堆触摸事件在起作用——而且代码更清晰。享受吧!

import unittest, time
from selenium import webdriver

print "Here are our available touch actions (ignore the ones that look like __xx__): ", dir(webdriver.TouchActions)
#print dir(webdriver)



class Test(unittest.TestCase):


    def setUp(self):
        self.driver = webdriver.Remote(command_executor='http://localhost:8080/wd/hub',  desired_capabilities=webdriver.DesiredCapabilities.ANDROID)
        self.touch =webdriver.TouchActions(self.driver)

        #self.driver = TouchActions(self.driver)
        #self.driver = webdriver.Firefox()
        self.driver.implicitly_wait(30)


    def testHotmail(self):
        self.driver.get("http://www.hotmail.com")

        elem=self.driver.find_element_by_css_selector("input[name='login']")
        #tap command
        self.touch.tap(elem).perform()
        time.sleep(2)
        elem.send_keys("hello world")
        time.sleep(2)
        #double tap
        self.touch.double_tap(elem).perform()
        time.sleep(2)

        #testing that regular webdriver commands still work
        print self.driver.find_element_by_partial_link_text("Can't access").text

        elem= self.driver.find_element_by_css_selector("input[type='submit']")
        self.touch.tap(elem).perform()
        time.sleep(3)




    def tearDown(self):

        time.sleep(3)

        try:
            self.driver.quit()
        except Exception:
            print(" TearDown Method: Browser seems already closed.")

        pass


if __name__ == "__main__":
    unittest.main()

这是一个原始的 Java 示例:

WebElement toFlick = driver.findElement(By.id("image"));
// 400 pixels left at normal speed
Action flick = getBuilder(driver).flick(toFlick, 0, -400, FlickAction.SPEED_NORMAL)
        .build();
flick.perform();
WebElement secondImage = driver.findElement(“secondImage”);
assertTrue(secondImage.isDisplayed());

最佳答案

我对您的示例进行了一些调整,至少测试运行没有错误。我不知道当用户在用户名字段中双击时您希望网站做什么...

修改后的代码:

import unittest, time

from selenium.webdriver import Remote
from selenium.webdriver import  DesiredCapabilities
from selenium.webdriver.remote import webelement , command
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.touch_actions import TouchActions




class Test(unittest.TestCase):


    def setUp(self):
        remote = Remote(command_executor='http://localhost:8080/wd/hub',  desired_capabilities=DesiredCapabilities.ANDROID)
        self.remote=remote
        remote.implicitly_wait(30)

    def tearDown(self):
        pass


    def testName(self):
        # self.remote.get("http://icd.intraxinc.com/pxr")
        self.remote.get("https://icd.intraxinc.com/pxr/ext/login.action")
        elems= self.remote.find_element_by_css_selector("#j_username")
        print dir(self)
        print dir(self.remote)
        touchactions = TouchActions(self.remote)
        print dir(touchactions)
        touchactions.double_tap(elems)


if __name__ == "__main__":
    #import sys;sys.argv = ['', 'Test.testName']
    unittest.main()

我在示例中留下了各种调试打印语句,以向您展示我是如何调查您所面临的问题的。我还将 URL 更改为您的登录页面重定向到的 URL。这是解决我在设备上安装的某个版本的 Android 驱动程序时遇到的不相关问题的解决方法。

仅供引用:我在运行 Android 4.0.4 的 Android 手机上使用 android-server-2.21.0.apk 进行了测试。以下是您的示例代码的重大更改

        touchactions = TouchActions(self.remote)
        print dir(touchactions)
        touchactions.double_tap(elems)

关于android - webdriver python 的触摸事件示例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15884878/

相关文章:

android - 导致堆大小和分配的内存之间存在这些差异的因素是什么?

python - sqlalchemy 关系 PrimaryJoin 与自身列和父列

python - 迁移后的 Django South 迁移从初始开始

java - 如何在selenium中上传多个文件进行验证?

android - Android Studio如何在 Activity 开始时自动播放背景音乐

android - 如何在 BottomNavigationView 中动态隐藏菜单项?

python - 使用 python 模块通过转换 unicode 字符 u'\u20ac' 打印欧元符号 €

python - 无法单击 selenium python 下拉菜单中的列表项

java - 当我在 selenium 中运行该程序时,我收到以下消息。使用的Java版本是9.0.1

android - 操作栏不显示