feat: switch to iOS springboard before init WDA session

This commit is contained in:
debugtalk
2022-07-31 14:50:11 +08:00
parent 513159abb9
commit 10a3b15efd

View File

@@ -320,6 +320,15 @@ func (r *HRPRunner) InitWDAClient(udid string) (client *wdaClient, err error) {
return client, nil return client, nil
} }
// switch to iOS springboard before init WDA session
// aviod getting stuck when some super app is activate such as douyin or wexin
log.Info().Msg("switch to iOS springboard")
bundleID := "com.apple.springboard"
_, err = targetDevice.GIDevice().AppLaunch(bundleID)
if err != nil {
return nil, errors.Wrap(err, "launch springboard failed")
}
// init WDA driver // init WDA driver
capabilities := gwda.NewCapabilities() capabilities := gwda.NewCapabilities()
capabilities.WithDefaultAlertAction(gwda.AlertActionAccept) capabilities.WithDefaultAlertAction(gwda.AlertActionAccept)
@@ -345,6 +354,7 @@ func (r *HRPRunner) InitWDAClient(udid string) (client *wdaClient, err error) {
// cache wda client // cache wda client
r.wdaClients = make(map[string]*wdaClient) r.wdaClients = make(map[string]*wdaClient)
client = &wdaClient{ client = &wdaClient{
Device: targetDevice,
Driver: driver, Driver: driver,
WindowSize: windowSize, WindowSize: windowSize,
} }
@@ -433,12 +443,18 @@ func runStepIOS(r *SessionRunner, step *TStep) (stepResult *StepResult, err erro
var errActionNotImplemented = errors.New("UI action not implemented") var errActionNotImplemented = errors.New("UI action not implemented")
type wdaClient struct { type wdaClient struct {
Device *gwda.Device
Driver gwda.WebDriver Driver gwda.WebDriver
WindowSize gwda.Size WindowSize gwda.Size
} }
// screenShot takes screenshot and saves image file to $CWD/screenshots/ folder
func (w *wdaClient) screenShot() error { func (w *wdaClient) screenShot() error {
raw, err := w.Driver.Screenshot() // gidevice 和 gwda 均可实现截图功能,但 gidevice 的截图性能更优
// gwda 通过 wda 请求获取(分辨率、响应时间均由 wda 决定)
// gidevice 直接通过 Apple 允许的底层通信获取
// raw, err := w.Driver.Screenshot()
raw, err := w.Device.GIDevice().Screenshot()
if err != nil { if err != nil {
return errors.Wrap(err, "screenshot by WDA failed") return errors.Wrap(err, "screenshot by WDA failed")
} }