2016-12-26 104 views
1

我在使用多線程的多android設備上運行parllel測試。該代碼工作正常,沒有多線程。我認爲有一些與Appium相關的同步問題:TouchAction。Appium:使用多線程時,Appium :: TouchAction(ruby)會發生衝突嗎?

這裏是我的代碼:

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 

如果我只留一個線程,觸摸動作執行perfectly.How我可以同步Appium :: TouchAction的操作?

回答

0

,我answred你,如果你使用的是Java與Appium因爲我以前沒有使用過的Ruby: 一種你參考:(希望幫助) http://www.software-testing-tutorials-automation.com/2015/11/pefrorm-multitouch-action-using-appium.html

// 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();