mirror of
https://github.com/httprunner/httprunner.git
synced 2026-05-15 20:38:44 +08:00
63 lines
2.4 KiB
Go
63 lines
2.4 KiB
Go
package uixt
|
||
|
||
import (
|
||
"github.com/electricbubble/gwda"
|
||
"github.com/pkg/errors"
|
||
"github.com/rs/zerolog/log"
|
||
)
|
||
|
||
const (
|
||
// Changes the value of maximum depth for traversing elements source tree.
|
||
// It may help to prevent out of memory or timeout errors while getting the elements source tree,
|
||
// but it might restrict the depth of source tree.
|
||
// A part of elements source tree might be lost if the value was too small. Defaults to 50
|
||
snapshotMaxDepth = 10
|
||
// Allows to customize accept/dismiss alert button selector.
|
||
// It helps you to handle an arbitrary element as accept button in accept alert command.
|
||
// The selector should be a valid class chain expression, where the search root is the alert element itself.
|
||
// The default button location algorithm is used if the provided selector is wrong or does not match any element.
|
||
// e.g. **/XCUIElementTypeButton[`label CONTAINS[c] ‘accept’`]
|
||
acceptAlertButtonSelector = "**/XCUIElementTypeButton[`label IN {'允许','好','仅在使用应用期间','稍后再说'}`]"
|
||
dismissAlertButtonSelector = "**/XCUIElementTypeButton[`label IN {'不允许','暂不'}`]"
|
||
)
|
||
|
||
func InitWDAClient(options ...gwda.DeviceOption) (*DriverExt, error) {
|
||
// init wda device
|
||
targetDevice, err := gwda.NewDevice(options...)
|
||
if err != nil {
|
||
return nil, err
|
||
}
|
||
|
||
// 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
|
||
gwda.SetDebug(true)
|
||
capabilities := gwda.NewCapabilities()
|
||
capabilities.WithDefaultAlertAction(gwda.AlertActionAccept)
|
||
driver, err := gwda.NewUSBDriver(capabilities, *targetDevice)
|
||
if err != nil {
|
||
return nil, errors.Wrap(err, "failed to init WDA driver")
|
||
}
|
||
driverExt, err := Extend(driver, 0.95)
|
||
if err != nil {
|
||
return nil, errors.Wrap(err, "failed to extend gwda.WebDriver")
|
||
}
|
||
settings, err := driverExt.SetAppiumSettings(map[string]interface{}{
|
||
"snapshotMaxDepth": snapshotMaxDepth,
|
||
"acceptAlertButtonSelector": acceptAlertButtonSelector,
|
||
})
|
||
if err != nil {
|
||
return nil, errors.Wrap(err, "failed to set appium WDA settings")
|
||
}
|
||
log.Info().Interface("appiumWDASettings", settings).Msg("set appium WDA settings")
|
||
|
||
return driverExt, nil
|
||
}
|