ソシャゲの自動化をしたく、debug buildでのテストはいくつもあるのですが、
AppStoreからダウンロードしたものを自動化できないか調べてみました!
appiumにmac driverがあるので、それで操作できました!
今回はRuby(irbでdebugしやすいので)ですが、TS, Pythonなどなんでも動きそう
アプリのダウンロード
macで起動させるため、Mac AppStoreからダウンロードします。
Mac AppStoreで配信されてないアプリの場合、Play Coverで起動できるかも...?
appiumのダウンロード
brew install node
npx appium driver install mac2
gem install --no-document appium_lib
npx appium
システム設定→セキュリティとプライバシー→プライバシー→アクセシビリティ→Xcode Helperを追加
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Agents/
サンプルコード
require "appium_lib"
opts = {
caps: {
platformName: "mac",
'appium:automationName': "Mac2",
'appium:bundleId': "com.apple.calculator",
},
appium_lib: {
server_url: "http://127.0.0.1:4723",
wait: 0.1,
},
}
driver = Appium::Driver.new(opts).start_driver
driver.page_source # => xmlがstringで返ってくるのでここからDOMを探す
application_element = @driver.find_element(:class_name, 'XCUIElementTypeApplication')
puts application_element.attribute(:title) # => 計算機
element = driver.find_element(xpath: "//XCUIElementTypeButton[@label='2']") # => 2のボタンを取得
element.click # => 2のボタンをクリック
ゲームなどは、DOMがないので、スクリーンショットを撮ってクリックしたい座標を求めクリックします
element = @driver.find_element(name: "計算機")
elememnt.save_element_screenshot(element, "screenshot.png") # => スクリーンショットが撮れる
# スクロールの操作例
f1 = ::Selenium::WebDriver::Interactions.pointer(:touch, name: 'finger1')
f1.create_pointer_move(duration: 1, x: 200, y: 500, origin: ::Selenium::WebDriver::Interactions::PointerMove::VIEWPORT)
f1.create_pointer_down(:left)
f1.create_pointer_move(duration: 1, x: 200, y: 200, origin: ::Selenium::WebDriver::Interactions::PointerMove::VIEWPORT)
f1.create_pointer_up(:left)
@driver.perform_actions([f1])
操作例など詳しくは↓(seleniumを継承して上手くやっているみたい)