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) } }