From cf5761836a896b15d916a1af368d4107a3f68a76 Mon Sep 17 00:00:00 2001 From: debugtalk Date: Wed, 31 Aug 2022 22:31:45 +0800 Subject: [PATCH] fix: get ocr exact text in first priority --- examples/uitest/demo_weixin_test.go | 12 +++++------- hrp/internal/uixt/ocr.go | 18 +++++++++++++++--- hrp/step_ios_ui.go | 17 ++++++++++++----- 3 files changed, 32 insertions(+), 15 deletions(-) diff --git a/examples/uitest/demo_weixin_test.go b/examples/uitest/demo_weixin_test.go index 0dce08a4..26611ae7 100644 --- a/examples/uitest/demo_weixin_test.go +++ b/examples/uitest/demo_weixin_test.go @@ -21,19 +21,17 @@ func TestIOSWeixinLive(t *testing.T) { hrp.NewStep("进入直播页"). IOS(). Tap("发现"). // 进入「发现页」 - TapByOCR("视频号"). // 通过 OCR 识别「视频号」 - Validate(). - AssertLabelExists("视频号"), + TapByOCR("视频号"), // 通过 OCR 识别「视频号」 hrp.NewStep("处理青少年弹窗"). IOS(). - TapByOCR("我知道了", hrp.WithIgnoreNotFoundError(false)), + TapByOCR("我知道了", hrp.WithIgnoreNotFoundError(true)), hrp.NewStep("在推荐页上划,直到出现「轻触进入直播间」"). IOS(). SwipeToTapText("轻触进入直播间", hrp.WithMaxRetryTimes(10)), - hrp.NewStep("向上滑动,等待 60s"). + hrp.NewStep("向上滑动,等待 10s"). IOS(). - SwipeUp().Sleep(60).ScreenShot(). // 上划 1 次,等待 60s,截图保存 - SwipeUp().Times(60).ScreenShot(), // 再上划 1 次,等待 60s,截图保存 + SwipeUp().Sleep(10).ScreenShot(). // 上划 1 次,等待 10s,截图保存 + SwipeUp().Times(10).ScreenShot(), // 再上划 1 次,等待 10s,截图保存 }, } fmt.Println(testCase) diff --git a/hrp/internal/uixt/ocr.go b/hrp/internal/uixt/ocr.go index fbc77b96..d261e3de 100644 --- a/hrp/internal/uixt/ocr.go +++ b/hrp/internal/uixt/ocr.go @@ -92,14 +92,13 @@ func (s *veDEMOCRService) FindText(text string, imageBuf []byte) (rect image.Rec return } + var rects []image.Rectangle for _, ocrResult := range ocrResults { // not contains text if !strings.Contains(ocrResult.Text, text) { continue } - // contains text - // only find the first matched one rect = image.Rectangle{ // ocrResult.Points 顺序:左上 -> 右上 -> 右下 -> 左下 Min: image.Point{ @@ -111,7 +110,20 @@ func (s *veDEMOCRService) FindText(text string, imageBuf []byte) (rect image.Rec Y: int(ocrResult.Points[2].Y), }, } - return + + // contains text while not match exactly + if ocrResult.Text != text { + rects = append(rects, rect) + continue + } + + // match exactly + return rect, nil + } + + // only find the first matched one + if len(rects) > 0 { + return rects[0], nil } return image.Rectangle{}, fmt.Errorf("text %s not found", text) diff --git a/hrp/step_ios_ui.go b/hrp/step_ios_ui.go index 6b83ceb4..5f1126ed 100644 --- a/hrp/step_ios_ui.go +++ b/hrp/step_ios_ui.go @@ -460,11 +460,18 @@ func (r *HRPRunner) InitWDAClient(device WDADevice) (client *uiDriver, err error } } - driverExt, err := uixt.InitWDAClient( - gwda.WithSerialNumber(device.UDID), - gwda.WithPort(device.Port), - gwda.WithMjpegPort(device.MjpegPort), - ) + var deviceOptions []gwda.DeviceOption + if device.UDID != "" { + deviceOptions = append(deviceOptions, gwda.WithSerialNumber(device.UDID)) + } + if device.Port != 0 { + deviceOptions = append(deviceOptions, gwda.WithPort(device.Port)) + } + if device.MjpegPort != 0 { + deviceOptions = append(deviceOptions, gwda.WithMjpegPort(device.MjpegPort)) + } + + driverExt, err := uixt.InitWDAClient(deviceOptions...) if err != nil { return nil, err }