Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Appium:应用多线程时,Appium::TouchAction(ruby)中是否会发生冲突?_Android_Ruby_Multithreading_Appium - Fatal编程技术网

Android Appium:应用多线程时,Appium::TouchAction(ruby)中是否会发生冲突?

Android Appium:应用多线程时,Appium::TouchAction(ruby)中是否会发生冲突?,android,ruby,multithreading,appium,Android,Ruby,Multithreading,Appium,我正在使用多线程在多android设备上运行parllel测试。代码在没有多线程的情况下运行良好。我认为存在一些与Appium:TouchAction相关的同步问题 这是我的密码: require 'thread' require 'appium_lib' TARGET_APP_ACTIVITY = 'something' TARGET_APP_PACKAGE = 'mlab.android.speedvideo.pro' include Appium:

我正在使用多线程在多android设备上运行parllel测试。代码在没有多线程的情况下运行良好。我认为存在一些与Appium:TouchAction相关的同步问题

这是我的密码:

    require 'thread'
    require 'appium_lib'
    TARGET_APP_ACTIVITY = 'something'
    TARGET_APP_PACKAGE = 'mlab.android.speedvideo.pro' 
    include Appium::Common
    def start_app(device_id,port_num)
        caps_config={ platformName: 'Android', appActivity: TARGET_APP_ACTIVITY, 
        deviceName: '', udid: device_id, appPackage:   TARGET_APP_PACKAGE,newCommandTimeout: 3600}

        appium_lib_config={ port: port_num}

        opts={caps:caps_config,appium_lib:appium_lib_config}
        orig= Appium::Driver.new(opts)
        return orig
    end

    def test(device1,device2)
        cmd1  = "start appium -p 4000 -bp 4001 -U " + device1
        cmd2  = "start appium -p 4002 -bp 4003 -U " + device2
        system(cmd1)
        system(cmd2)
        sleep 20

        threads = []
        threads << Thread.new {
            orig = start_app(device1,4000)
            dr = orig.start_driver
            dr.find_element(id:'something').click
            dr.find_element(id:'something').click
            dest_elem =  dr.find_element(id:'something')
            src_elem = dr.find_element(id:'something')
            Appium::TouchAction.new.press(element: src_elem).move_to(element:dest_elem).perform
            src_elem = dr.find_element(id:'something')
            Appium::TouchAction.new.press(element: src_elem).move_to(element:dest_elem).perform
            src_elem = dr.find_element(id:'something')
            Appium::TouchAction.new.press(element: src_elem).move_to(element:dest_elem).perform

            orig.driver_quit
        }

        threads << Thread.new {
            orig = start_app(device2,4002)
            dr = orig.start_driver
            dr.find_element(id:'something').click
            dr.find_element(id:'something').click
            dest_elem = dr.find_element(id:'something')
            src_elem = dr.find_element(id:'something')
            wait {Appium::TouchAction.new.press(element: src_elem).move_to(element:dest_elem).perform}
            src_elem = dr.find_element(id:'something')
            wait {Appium::TouchAction.new.press(element: src_elem).move_to(element:dest_elem).perform}
            src_elem = dr.find_element(id:'something')
            wait {Appium::TouchAction.new.press(element: src_elem).move_to(element:dest_elem).perform}

            orig.driver_quit
       }

        threads.each { |t|
            t.join
        }
    end 
    if __FILE__ == $0
        test(ARGV[0],ARGV[1])
    end
需要“线程”
需要“应用库”
目标应用程序活动='something'
TARGET_APP_PACKAGE='mlab.android.speedvideo.pro'
包含Appium::Common
def启动应用程序(设备id、端口号)
caps_config={platformName:'Android',appActivity:TARGET_APP_ACTIVITY,
deviceName:'',udid:device\u id,appPackage:TARGET\u APP\u PACKAGE,newCommandTimeout:3600}
appium_lib_config={port:port_num}
opts={caps:caps\u config,appium\u lib:appium\u lib\u config}
orig=Appium::Driver.new(选项)
返回原点
结束
def测试(设备1、设备2)
cmd1=“启动应用程序-p 4000-bp 4001-U”+设备1
cmd2=“启动应用程序-p 4002-bp 4003-U”+设备2
系统(cmd1)
系统(cmd2)
睡20
线程=[]

threads我向您解释,好像您正在将java与Appium一起使用,因为我以前没有使用过Ruby: 推荐信:(希望对你有所帮助)

 // Create object of MultiTouchAction class.
  MultiTouchAction maction = new MultiTouchAction((MobileDriver) driver);

  // Set touch action1 on given X Y Coordinates of screen.
  TouchAction action1 = new TouchAction((MobileDriver) driver).longPress(x1, y1).waitAction(1500);
  // Set touch action2 on given X Y Coordinates of screen.
  TouchAction action2 = new TouchAction((MobileDriver) driver).longPress(x2, y2).waitAction(1500);
  // Set touch action3 on given X Y Coordinates of screen.
  TouchAction action3 = new TouchAction((MobileDriver) driver).longPress(x3, y3).waitAction(1500);
  // Set touch action4 on given X Y Coordinates of screen.
  TouchAction action4 = new TouchAction((MobileDriver) driver).longPress(x4, y4).waitAction(1500);
  // Set touch action5 on given X Y Coordinates of screen.
  TouchAction action5 = new TouchAction((MobileDriver) driver).longPress(x5, y5).waitAction(1500);

  // Generate multi touch action chain using different actions and perform It.
  maction.add(action1).add(action2).add(action3).add(action4).add(action5).perform();