Files
httprunner/hrp/internal/uixt/android_test.go
2022-09-26 11:00:18 +08:00

1385 lines
28 KiB
Go

package uixt
import (
"io/ioutil"
"testing"
"time"
)
var uiaServerURL = "http://localhost:6790/wd/hub"
func TestDriver_NewSession(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
firstMatchEntry := make(map[string]interface{})
firstMatchEntry["package"] = "com.android.settings"
firstMatchEntry["activity"] = "com.android.settings/.Settings"
caps := Capabilities{
"firstMatch": []interface{}{firstMatchEntry},
"alwaysMatch": struct{}{},
}
sessionID, err := driver.NewSession(caps)
if err != nil {
t.Fatal(err)
}
if len(sessionID) == 0 {
t.Fatal("should not be empty")
}
}
func TestNewDriver(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
t.Log(driver.sessionId)
}
func TestDriver_Quit(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
if err = driver.Quit(); err != nil {
t.Fatal(err)
}
}
func TestDriver_Status(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
_, err = driver.Status()
if err != nil {
t.Fatal(err)
}
}
func TestDriver_SessionIDs(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
sessions, err := driver.SessionIDs()
if err != nil {
t.Fatal(err)
}
if len(sessions) == 0 {
t.Fatal("should have at least one")
}
t.Log(len(sessions), sessions)
}
func TestDriver_SessionDetails(t *testing.T) {
// firstMatchEntry := make(map[string]interface{})
// firstMatchEntry["package"] = "com.android.settings"
// firstMatchEntry["activity"] = "com.android.settings/.Settings"
// caps = Capabilities{
// "firstMatch": []interface{}{firstMatchEntry},
// "alwaysMatch": struct{}{},
// }
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
scrollData, err := driver.SessionDetails()
if err != nil {
t.Fatal(err)
}
t.Log(scrollData)
}
func TestDriver_Screenshot(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
screenshot, err := driver.Screenshot()
if err != nil {
t.Fatal(err)
}
t.Log(ioutil.WriteFile("/Users/hero/Desktop/s1.png", screenshot.Bytes(), 0o600))
}
func TestDriver_Orientation(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
orientation, err := driver.Orientation()
if err != nil {
t.Fatal(err)
}
t.Log(orientation)
}
func TestDriver_Rotation(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
rotation, err := driver.Rotation()
if err != nil {
t.Fatal(err)
}
t.Logf("x = %d\ty = %d\tz = %d", rotation.X, rotation.Y, rotation.Z)
}
func TestDriver_DeviceSize(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
deviceSize, err := driver.DeviceSize()
if err != nil {
t.Fatal(err)
}
t.Logf("width = %d\theight = %d", deviceSize.Width, deviceSize.Height)
}
func TestDriver_Source(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
source, err := driver.Source()
if err != nil {
t.Fatal(err)
}
t.Log(source)
}
func TestDriver_StatusBarHeight(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
statusBarHeight, err := driver.StatusBarHeight()
if err != nil {
t.Fatal(err)
}
t.Log(statusBarHeight)
}
func TestDriver_BatteryInfo(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
batteryInfo, err := driver.BatteryInfo()
if err != nil {
t.Fatal(err)
}
t.Log(batteryInfo)
}
func TestDriver_GetAppiumSettings(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
appiumSettings, err := driver.GetAppiumSettings()
if err != nil {
t.Fatal(err)
}
for k := range appiumSettings {
t.Logf("key: %s\tvalue: %v", k, appiumSettings[k])
}
// t.Log(appiumSettings)
}
func TestDriver_DeviceScaleRatio(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
scaleRatio, err := driver.DeviceScaleRatio()
if err != nil {
t.Fatal(err)
}
t.Log(scaleRatio)
}
func TestDriver_DeviceInfo(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
devInfo, err := driver.DeviceInfo()
if err != nil {
t.Fatal(err)
}
t.Logf("api version: %s", devInfo.APIVersion)
t.Logf("platform version: %s", devInfo.PlatformVersion)
t.Logf("bluetooth state: %s", devInfo.Bluetooth.State)
}
func TestDriver_AlertText(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
alertText, err := driver.AlertText()
if err != nil {
t.Fatal(err)
}
t.Log(alertText)
}
func TestDriver_Tap(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
err = driver.Tap(150, 340)
if err != nil {
t.Fatal(err)
}
time.Sleep(time.Second)
err = driver.TapFloat(60.5, 125.5)
if err != nil {
t.Fatal(err)
}
time.Sleep(time.Second)
err = driver.TapPoint(Point{X: 150, Y: 340})
if err != nil {
t.Fatal(err)
}
time.Sleep(time.Second)
err = driver.TapPointF(PointF{X: 60.5, Y: 125.5})
if err != nil {
t.Fatal(err)
}
}
func TestDriver_Swipe(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
err = driver.Swipe(400, 1000, 400, 500, 10)
if err != nil {
t.Fatal(err)
}
err = driver.SwipeFloat(400, 555.5, 400, 1255.5)
if err != nil {
t.Fatal(err)
}
startPoint := Point{400, 1000}
endPoint := Point{400, 500}
err = driver.SwipePoint(startPoint, endPoint)
if err != nil {
t.Fatal(err)
}
startPointF := PointF{400, 555.5}
endPointF := PointF{400, 1255.5}
err = driver.SwipePointF(startPointF, endPointF)
if err != nil {
t.Fatal(err)
}
}
func TestDriver_Drag(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
err = driver.Drag(400, 260, 400, 500, 10)
if err != nil {
t.Fatal(err)
}
time.Sleep(time.Millisecond * 200)
err = driver.DragFloat(400, 501.5, 400, 261.5, 10)
if err != nil {
t.Fatal(err)
}
time.Sleep(time.Millisecond * 200)
startPoint := Point{400, 260}
endPoint := Point{400, 500}
err = driver.DragPoint(startPoint, endPoint)
if err != nil {
t.Fatal(err)
}
time.Sleep(time.Millisecond * 200)
startPointF := PointF{400.5, 501.5}
endPointF := PointF{400.5, 261.5}
err = driver.DragPointF(startPointF, endPointF)
if err != nil {
t.Fatal(err)
}
}
func TestDriver_TouchLongClick(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
err = driver.TouchLongClick(400, 260, 1.2222)
if err != nil {
t.Fatal(err)
}
time.Sleep(time.Millisecond * 200)
err = driver.TouchLongClickPoint(Point{X: 400, Y: 260})
if err != nil {
t.Fatal(err)
}
}
func TestDriver_SendKeys(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
err = driver.SendKeys("abc")
if err != nil {
t.Fatal(err)
}
time.Sleep(time.Second * 2)
err = driver.SendKeys("def", false)
if err != nil {
t.Fatal(err)
}
time.Sleep(time.Second * 2)
err = driver.SendKeys("\\n")
// err = driver.SendKeys(`\n`, false)
if err != nil {
t.Fatal(err)
}
}
func TestDriver_PressBack(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
err = driver.PressBack()
if err != nil {
t.Fatal(err)
}
}
func TestDriver_PressKeyCode(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
err = driver.PressKeyCodeAsync(KCx)
if err != nil {
t.Fatal(err)
}
err = driver.PressKeyCodeAsync(KCx, KMCapLocked)
if err != nil {
t.Fatal(err)
}
// err = driver.PressKeyCodeAsync(KCExplorer)
// if err != nil {
// t.Fatal(err)
// }
err = driver.PressKeyCode(KCExplorer, KMEmpty)
if err != nil {
t.Fatal(err)
}
}
func TestDriver_LongPressKeyCode(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
err = driver.LongPressKeyCode(KCAt, KMEmpty)
if err != nil {
t.Fatal(err)
}
}
func TestDriver_TouchDown(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
doTouchUp := func() {
err = driver.TouchUp(400, 260)
if err != nil {
t.Fatal(err)
}
}
err = driver.TouchDown(400, 260)
if err != nil {
t.Fatal(err)
}
// _ = driver.TapPoint(Point{400, 500})
doTouchUp()
err = driver.TouchDownPoint(Point{400, 260})
if err != nil {
t.Fatal(err)
}
doTouchUp()
}
func TestDriver_TouchUp(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
err = driver.TouchDown(400, 260)
if err != nil {
t.Fatal(err)
}
// err = driver.TouchUp(400, 260)
err = driver.TouchUpPoint(Point{400, 260})
if err != nil {
t.Fatal(err)
}
}
func TestDriver_TouchMove(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
doTouchDown := func(x, y int) {
err = driver.TouchDown(x, y)
if err != nil {
t.Fatal(err)
}
}
doTouchUp := func(x, y int) {
err = driver.TouchUp(x, y)
if err != nil {
t.Fatal(err)
}
}
doTouchDown(400, 260)
err = driver.TouchMove(400, 500)
if err != nil {
t.Fatal(err)
}
doTouchUp(400, 500)
doTouchDown(400, 500)
err = driver.TouchMove(400, 260)
if err != nil {
t.Fatal(err)
}
doTouchUp(400, 260)
}
func TestDriver_OpenNotification(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
err = driver.OpenNotification()
if err != nil {
t.Fatal(err)
}
}
func TestDriver_Flick(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
err = driver.Flick(50, -100)
if err != nil {
t.Fatal(err)
}
}
func TestDriver_ScrollTo(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
err = driver.ScrollTo(AndroidBySelector{ClassName: "android.widget.SeekBar"})
if err != nil {
t.Fatal(err)
}
}
func TestDriver_MultiPointerGesture(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
gesture1 := NewTouchAction().Add(150, 340, 0.35).AddFloat(50, 300)
gesture2 := NewTouchAction().Add(200, 340).AddFloat(300, 300)
gesture3 := NewTouchAction().Add(300, 500).AddFloat(350, 500).AddPoint(Point{300, 550}).AddPointF(PointF{350, 550})
_ = gesture3
// err = driver.MultiPointerGesture(gesture1, gesture2)
err = driver.MultiPointerGesture(gesture1, gesture2, gesture3)
if err != nil {
t.Fatal(err)
}
}
func TestDriver_PerformW3CActions(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
// actionKey := NewW3CAction(ATKey, NewW3CGestures().KeyDown("g").KeyUp("g").Pause().KeyDown("o").KeyUp("o"))
// actionKey := NewW3CAction(ATKey, NewW3CGestures().SendKeys("golang"))
// err = driver.PerformW3CActions(actionKey)
// if err != nil {
// t.Fatal(err)
// }
// var queryField map[string]string
// queryField = make(map[string]string)
// {
// queryField = map[string]string{
// "a": "",
// }
// }
elem, err := driver.FindElement(AndroidBySelector{ResourceIdID: "com.android.settings:id/search"})
if err != nil {
t.Fatal(err)
}
// actionPointer := NewW3CAction(ATPointer, NewW3CGestures().PointerMove(0, 0, elem.id).PointerDown().Pause(3).PointerUp())
// actionPointer := NewW3CAction(ATPointer,
// NewW3CGestures().PointerMove(400, 500, "viewport").PointerDown().Pause(2).
// PointerMove(0, 0, elem.id).Pause(2).
// PointerMove(20, 0, "pointer").Pause(2).
// PointerUp(),
// )
actionPointer := NewW3CAction(ATPointer,
NewW3CGestures().PointerMoveTo(400, 500).PointerDown().
PointerMouseOver(0, 0, elem).
PointerMoveRelative(20, 0).PointerUp())
err = driver.PerformW3CActions(actionPointer)
if err != nil {
t.Fatal(err)
}
}
func TestDriver_GetClipboard(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
text, err := driver.GetClipboard()
if err != nil {
t.Fatal(err)
}
t.Log(text)
}
func TestDriver_SetClipboard(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
content := "test123"
err = driver.SetClipboard(ClipDataTypePlaintext, content)
if err != nil {
t.Fatal(err)
}
text, err := driver.GetClipboard()
if err != nil {
t.Fatal(err)
}
if text != content {
t.Fatal("should be the same")
}
}
func TestDriver_AlertAccept(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
err = driver.AlertAccept()
// err = driver.AlertAccept("是")
if err != nil {
t.Fatal(err)
}
}
func TestDriver_AlertDismiss(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
// err = driver.AlertDismiss()
err = driver.AlertDismiss("否")
if err != nil {
t.Fatal(err)
}
}
func TestDriver_SetAppiumSettings(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
appiumSettings, err := driver.GetAppiumSettings()
if err != nil {
t.Fatal(err)
}
sdopd := appiumSettings["shutdownOnPowerDisconnect"]
t.Log("shutdownOnPowerDisconnect:", sdopd)
err = driver.SetAppiumSettings(map[string]interface{}{"shutdownOnPowerDisconnect": !sdopd.(bool)})
if err != nil {
t.Fatal(err)
}
appiumSettings, err = driver.GetAppiumSettings()
if err != nil {
t.Fatal(err)
}
if appiumSettings["shutdownOnPowerDisconnect"] == sdopd.(bool) {
t.Fatal("should not be equal")
}
t.Log("shutdownOnPowerDisconnect:", appiumSettings["shutdownOnPowerDisconnect"])
}
func TestDriver_SetOrientation(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
err = driver.SetOrientation(OrientationLandscapeLeft)
// err = driver.SetOrientation(OrientationPortrait)
if err != nil {
t.Fatal(err)
}
}
func TestDriver_SetRotation(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
// err = driver.SetRotation(Rotation{Z: 0})
err = driver.SetRotation(Rotation{Z: 270})
if err != nil {
t.Fatal(err)
}
}
func TestDriver_NetworkConnection(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
err = driver.NetworkConnection(NetworkTypeWifi)
if err != nil {
t.Fatal(err)
}
}
func TestDriver_FindElement(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
elem, err := driver.FindElement(AndroidBySelector{ResourceIdID: "android:id/content"})
if err != nil {
t.Fatal(err)
}
t.Log(elem.GetAttribute("class"))
}
func TestDriver_FindElements(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
// elements, err := driver.FindElements(AndroidBySelector{ResourceIdID: "com.android.settings:id/title"})
elements, err := driver.FindElements(AndroidBySelector{UiAutomator: "new UiSelector().textStartsWith(\"应\");"})
if err != nil {
t.Fatal(err)
}
t.Log(len(elements))
}
func TestDriver_WaitWithTimeoutAndInterval(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
element, err := driver.FindElement(AndroidBySelector{UiAutomator: "new UiSelector().className(\"android.view.ViewGroup\");"})
if err != nil {
t.Fatal(err)
}
elem, err := element.FindElement(AndroidBySelector{UiAutomator: "new UiSelector().className(\"android.widget.LinearLayout\").index(6);"})
if err != nil {
t.Fatal(err)
}
rect, err := elem.Rect()
if err != nil {
t.Fatal(err)
}
x := rect.X + int(float64(rect.Width)*2)
y := rect.Y + rect.Height/2
err = driver.Tap(x, y)
if err != nil {
t.Fatal(err)
}
by := AndroidBySelector{UiAutomator: "new UiSelector().text(\"科技\");"}
exists := func(d *uiaDriver) (bool, error) {
element, err = d.FindElement(by)
if err == nil {
return true, nil
}
return false, nil
}
err = driver.WaitWithTimeoutAndInterval(exists, 1, 0.1)
if err != nil {
t.Fatal(err)
}
// element, err = driver.FindElement(by)
// if err != nil {
// t.Fatal(err)
// }
err = element.Click()
if err != nil {
t.Fatal(err)
}
}
func TestDriver_ActiveElement(t *testing.T) {
device, _ := NewAndroidDevice()
driver, err := device.NewUSBDriver(nil)
if err != nil {
t.Fatal(err)
}
defer func() {
_ = driver.Dispose()
}()
element, err := driver.ActiveElement()
if err != nil {
t.Fatal(err)
}
if err = element.SendKeys("test"); err != nil {
t.Fatal(err)
}
}
func TestUiSelectorHelper_NewUiSelectorHelper(t *testing.T) {
uiSelector := NewUiSelectorHelper().Text("a").String()
if uiSelector != `new UiSelector().text("a");` {
t.Fatal("[ERROR]", uiSelector)
}
uiSelector = NewUiSelectorHelper().Text("a").TextStartsWith("b").String()
if uiSelector != `new UiSelector().text("a").textStartsWith("b");` {
t.Fatal("[ERROR]", uiSelector)
}
uiSelector = NewUiSelectorHelper().ClassName("android.widget.LinearLayout").Index(6).String()
if uiSelector != `new UiSelector().className("android.widget.LinearLayout").index(6);` {
t.Fatal("[ERROR]", uiSelector)
}
uiSelector = NewUiSelectorHelper().Focused(false).Instance(6).String()
if uiSelector != `new UiSelector().focused(false).instance(6);` {
t.Fatal("[ERROR]", uiSelector)
}
uiSelector = NewUiSelectorHelper().ChildSelector(NewUiSelectorHelper().Enabled(true)).String()
if uiSelector != `new UiSelector().childSelector(new UiSelector().enabled(true));` {
t.Fatal("[ERROR]", uiSelector)
}
}
func Test_getFreePort(t *testing.T) {
freePort, err := getFreePort()
if err != nil {
t.Fatal(err)
}
t.Log(freePort)
}
func TestDeviceList(t *testing.T) {
devices, err := DeviceList()
if err != nil {
t.Fatal(err)
}
for i := range devices {
t.Log(devices[i].Serial())
}
}
func TestAndroidNewUSBDriver(t *testing.T) {
device, _ := NewAndroidDevice()
driver, err := device.NewUSBDriver(nil)
if err != nil {
t.Fatal(err)
}
defer driver.Dispose()
ready, err := driver.Status()
if err != nil {
t.Fatal(err)
}
if !ready {
t.Fatal("should be 'true'")
}
}
func TestDriver_ActiveAppPackageName(t *testing.T) {
device, _ := NewAndroidDevice()
driver, err := device.NewUSBDriver(nil)
if err != nil {
t.Fatal(err)
}
defer driver.Dispose()
appPackageName, err := driver.ActiveAppPackageName()
if err != nil {
t.Fatal(err)
}
t.Log(appPackageName)
}
func TestDriver_AppLaunch(t *testing.T) {
device, _ := NewAndroidDevice()
driver, err := device.NewUSBDriver(nil)
if err != nil {
t.Fatal(err)
}
defer driver.Dispose()
// err = driver.AppLaunch("tv.danmaku.bili", AndroidBySelector{ResourceIdID: "tv.danmaku.bili:id/action_bar_root"})
err = driver.AppLaunch("com.android.settings", AndroidBySelector{ResourceIdID: "android:id/list"})
if err != nil {
t.Fatal(err)
}
// screenshot, err := driver.Screenshot()
// if err != nil {
// t.Fatal(err)
// }
// t.Log(ioutil.WriteFile("/Users/hero/Desktop/s1.png", screenshot.Bytes(), 0600))
}
func TestDriver_AppTerminate(t *testing.T) {
device, _ := NewAndroidDevice()
driver, err := device.NewUSBDriver(nil)
if err != nil {
t.Fatal(err)
}
defer driver.Dispose()
err = driver.AppTerminate("tv.danmaku.bili")
if err != nil {
t.Fatal(err)
}
}
func TestNewWiFiDriver(t *testing.T) {
device, _ := NewAndroidDevice(WithAdbIP("192.168.1.28"))
driver, err := device.NewHTTPDriver(nil)
if err != nil {
t.Fatal(err)
}
// SetDebug(false, true)
_, err = driver.ActiveAppActivity()
if err != nil {
t.Fatal(err)
}
}
func TestDriver_AppInstall(t *testing.T) {
device, _ := NewAndroidDevice()
driver, err := device.NewUSBDriver(nil)
if err != nil {
t.Fatal(err)
}
defer driver.Dispose()
err = driver.AppInstall("/Users/hero/Desktop/xuexi_android_10002068.apk")
if err != nil {
t.Fatal(err)
}
}
func TestDriver_AppUninstall(t *testing.T) {
device, _ := NewAndroidDevice()
driver, err := device.NewUSBDriver(nil)
if err != nil {
t.Fatal(err)
}
defer driver.Dispose()
err = driver.AppUninstall("cn.xuexi.android")
if err != nil {
t.Fatal(err)
}
}
func TestBySelector_getMethodAndSelector(t *testing.T) {
testVal := "test id"
bySelector := AndroidBySelector{ResourceIdID: testVal}
method, selector := bySelector.getMethodAndSelector()
if method != "id" || selector != testVal {
t.Fatal(method, "=", selector)
}
bySelector = AndroidBySelector{ContentDescription: testVal}
method, selector = bySelector.getMethodAndSelector()
if method != "accessibility id" || selector != testVal {
t.Fatal(method, "=", selector)
}
}
func TestElement_Text(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
elem, err := driver.FindElement(AndroidBySelector{ResourceIdID: "com.android.settings:id/category_title"})
if err != nil {
t.Fatal(err)
}
text, err := elem.Text()
if err != nil {
t.Fatal(err)
}
t.Log(text)
}
func TestElement_GetAttribute(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
elem, err := driver.FindElement(AndroidBySelector{ResourceIdID: "com.android.settings:id/category_title"})
if err != nil {
t.Fatal(err)
}
attribute, err := elem.GetAttribute("class")
if err != nil {
t.Fatal(err)
}
t.Log(attribute)
}
func TestElement_ContentDescription(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
elem, err := driver.FindElement(AndroidBySelector{ResourceIdID: "com.android.settings:id/search"})
if err != nil {
t.Fatal(err)
}
name, err := elem.ContentDescription()
if err != nil {
t.Fatal(err)
}
t.Log(name)
}
func TestElement_Size(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
elem, err := driver.FindElement(AndroidBySelector{ResourceIdID: "com.android.settings:id/search"})
if err != nil {
t.Fatal(err)
}
size, err := elem.Size()
if err != nil {
t.Fatal(err)
}
t.Log(size)
}
func TestElement_Rect(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
elem, err := driver.FindElement(AndroidBySelector{ResourceIdID: "com.android.settings:id/category_title"})
if err != nil {
t.Fatal(err)
}
rect, err := elem.Rect()
if err != nil {
t.Fatal(err)
}
t.Log(rect)
}
func TestElement_Screenshot(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
elem, err := driver.FindElement(AndroidBySelector{ResourceIdID: "com.android.settings:id/category_title"})
if err != nil {
t.Fatal(err)
}
screenshot, err := elem.Screenshot()
if err != nil {
t.Fatal(err)
}
t.Log(ioutil.WriteFile("/Users/hero/Desktop/e1.png", screenshot.Bytes(), 0o600))
}
func TestElement_Location(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
elem, err := driver.FindElement(AndroidBySelector{ResourceIdID: "com.android.settings:id/category_title"})
if err != nil {
t.Fatal(err)
}
location, err := elem.Location()
if err != nil {
t.Fatal(err)
}
t.Log(location)
}
func TestElement_Click(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
elem, err := driver.FindElement(AndroidBySelector{ResourceIdID: "com.android.settings:id/title"})
if err != nil {
t.Fatal(err)
}
err = elem.Click()
if err != nil {
t.Fatal(err)
}
}
func TestElement_Clear(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
elem, err := driver.FindElement(AndroidBySelector{ResourceIdID: "android:id/search_src_text"})
if err != nil {
t.Fatal(err)
}
err = elem.Clear()
if err != nil {
t.Fatal(err)
}
}
func TestElement_SendKeys(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
elem, err := driver.FindElement(AndroidBySelector{ResourceIdID: "android:id/search_src_text"})
if err != nil {
t.Fatal(err)
}
// return
// err = elem.SendKeys("abc")
err = elem.SendKeys("456", false)
if err != nil {
t.Fatal(err)
}
}
func TestElement_FindElements(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
parentElem, err := driver.FindElement(AndroidBySelector{ResourceIdID: "com.android.settings:id/main_content"})
if err != nil {
t.Fatal(err)
}
elements, err := parentElem.FindElements(AndroidBySelector{ResourceIdID: "com.android.settings:id/category"})
if err != nil {
t.Fatal(err)
}
t.Log(len(elements))
}
func TestElement_FindElement(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
parentElem, err := driver.FindElement(AndroidBySelector{ResourceIdID: "com.android.settings:id/main_content"})
if err != nil {
t.Fatal(err)
}
elem, err := parentElem.FindElement(AndroidBySelector{ResourceIdID: "com.android.settings:id/category_title"})
if err != nil {
t.Fatal(err)
}
t.Log(elem.Text())
}
func TestElement_Swipe(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
elem, err := driver.FindElement(AndroidBySelector{ResourceIdID: "com.android.settings:id/category_title"})
if err != nil {
t.Fatal(err)
}
rect, err := elem.Rect()
if err != nil {
t.Fatal(err)
}
t.Log(rect)
var startX, startY, endX, endY int
startX = rect.X + rect.Width/20
startY = rect.Y + rect.Height/2
endX = startX
endY = startY - startY/2
err = elem.Swipe(startX, startY, endX, endY)
if err != nil {
t.Fatal(err)
}
startPoint := PointF{X: float64(rect.X + rect.Width/20 + 30), Y: float64(startY / 2)}
endPoint := PointF{X: startPoint.X, Y: startPoint.Y + startPoint.Y}
err = elem.SwipePointF(startPoint, endPoint)
if err != nil {
t.Fatal(err)
}
}
func TestElement_Drag(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
elements, err := driver.FindElements(AndroidBySelector{ClassName: "android.widget.TextView"})
if err != nil {
t.Fatal(err)
}
for i, elem := range elements {
text, _ := elem.Text()
t.Log(i, text)
}
rect, err := elements[0].Rect()
if err != nil {
t.Fatal(err)
}
// err = elements[0].Drag(300, 450, 256)
err = elements[0].Drag(300, 450, 256)
if err != nil {
t.Fatal(err)
}
err = elements[0].DragTo(elements[1], 256)
if err != nil {
t.Fatal(err)
}
endPoint := PointF{X: float64(rect.X + rect.Width/3*2), Y: float64(rect.Y + rect.Height/2)}
err = elements[0].DragPointF(endPoint, 256)
if err != nil {
t.Fatal()
}
}
func TestElement_Flick(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
elem, err := driver.FindElement(AndroidBySelector{UiAutomator: "new UiSelector().text(\"提示音和通知\");"})
if err != nil {
t.Fatal(err)
}
err = elem.Flick(36, 20, 100)
if err != nil {
t.Fatal(err)
}
}
func TestElement_ScrollTo(t *testing.T) {
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
// how to make it work?
// parentElem, err := driver.FindElement(AndroidBySelector{ClassName: "android.widget.ScrollView"})
// parentElem, err := driver.FindElement(AndroidBySelector{ResourceIdID: "com.cyanogenmod.filemanager:id/navigation_view_layout"})
parentElem, err := driver.FindElement(AndroidBySelector{ResourceIdID: "com.android.settings:id/dashboard"})
if err != nil {
t.Fatal(err)
}
err = parentElem.ScrollTo(AndroidBySelector{ContentDescription: "电池"})
if err != nil {
t.Fatal(err)
}
}
func TestElement_ScrollToElement(t *testing.T) {
// android.widget.HorizontalScrollView
driver, err := NewUIADriver(nil, uiaServerURL)
if err != nil {
t.Fatal(err)
}
// how to make it work?
parentElem, err := driver.FindElement(AndroidBySelector{UiAutomator: "new UiSelector().resourceId(\"com.android.settings:id/dashboard\");"})
if err != nil {
t.Fatal(err)
}
element, err := driver.FindElement(AndroidBySelector{UiAutomator: "new UiSelector().text(\"电池\");"})
if err != nil {
t.Fatal(err)
}
err = parentElem.ScrollToElement(element)
if err != nil {
t.Fatal(err)
}
}