# HttpRunner UIXT ๆจกๅ— ## ๐Ÿš€ ๆฆ‚่ฟฐ HttpRunner UIXT๏ผˆUI eXtended Testing๏ผ‰ๆ˜ฏ HttpRunner v4.3.0+ ๅผ•ๅ…ฅ็š„่ทจๅนณๅฐ UI ่‡ชๅŠจๅŒ–ๆต‹่ฏ•ๆจกๅ—๏ผŒๆไพ›็ปŸไธ€็š„ API ๆŽฅๅฃๆ”ฏๆŒๅคš็งๅนณๅฐ็š„ UI ่‡ชๅŠจๅŒ–ๆต‹่ฏ•๏ผŒๅนถ้›†ๆˆไบ†ๅ…ˆ่ฟ›็š„ AI ่ƒฝๅŠ›๏ผŒๅฎž็Žฐ็œŸๆญฃ็š„ๆ™บ่ƒฝๅŒ– UI ่‡ชๅŠจๅŒ–ๆต‹่ฏ•ใ€‚ ### ๆ ธๅฟƒ็‰นๆ€ง - **๐ŸŽฏ ่ทจๅนณๅฐๆ”ฏๆŒ**: Androidใ€iOSใ€HarmonyOSใ€Web ๆต่งˆๅ™จ็ปŸไธ€ๆŽฅๅฃ - **๐Ÿค– AI ๆ™บ่ƒฝๅŒ–**: ้›†ๆˆๅคง่ฏญ่จ€ๆจกๅž‹ๅ’Œ่ฎก็ฎ—ๆœบ่ง†่ง‰๏ผŒๆ”ฏๆŒ่‡ช็„ถ่ฏญ่จ€้ฉฑๅŠจ็š„ UI ๆ“ไฝœ - **๐Ÿ”ง MCP ๅ่ฎฎ**: ๅŸบไบŽ Model Context Protocol ็š„ๆ ‡ๅ‡†ๅŒ–ๅทฅๅ…ทๆŽฅๅฃ - **๐Ÿ“ฑ ๅคš่ฎพๅค‡็ฎก็†**: ๆ”ฏๆŒ็œŸๆœบใ€ๆจกๆ‹Ÿๅ™จใ€ๆต่งˆๅ™จ็š„็ปŸไธ€็ฎก็† - **๐ŸŽจ ไธฐๅฏŒๆ“ไฝœ**: ่งฆๆ‘ธใ€ๆป‘ๅŠจใ€่พ“ๅ…ฅใ€ๅบ”็”จ็ฎก็†็ญ‰ๅฎŒๆ•ดๆ“ไฝœ้›† - **๐Ÿ“Š ๆ™บ่ƒฝ่ฏ†ๅˆซ**: OCR ๆ–‡ๆœฌ่ฏ†ๅˆซใ€UI ๅ…ƒ็ด ๆฃ€ๆต‹ใ€ๅผน็ช—่ฏ†ๅˆซ ## ๐Ÿ—๏ธ ๆ ธๅฟƒๆžถๆž„ ### ๆ•ดไฝ“ๆžถๆž„ๅ›พ ``` โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ HttpRunner UIXT โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ XTDriver (ๆ‰ฉๅฑ•้ฉฑๅŠจ) โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ IDriver โ”‚ โ”‚ AI Services โ”‚ โ”‚ MCP Server โ”‚ โ”‚ โ”‚ โ”‚ (ๆ ธๅฟƒ้ฉฑๅŠจ) โ”‚ โ”‚ (AI ่ƒฝๅŠ›) โ”‚ โ”‚ (ๅทฅๅ…ทๅ่ฎฎ) โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ ่ฎพๅค‡้ฉฑๅŠจๅฑ‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ Android Driver โ”‚ โ”‚ iOS Driver โ”‚ โ”‚ Browser Driver โ”‚ โ”‚ โ”‚ โ”‚ (ADB/UIA2) โ”‚ โ”‚ (WDA) โ”‚ โ”‚ (WebDriver) โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค โ”‚ ่ฎพๅค‡ๅฑ‚ โ”‚ โ”‚ โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚ โ”‚ โ”‚ Android Device โ”‚ โ”‚ iOS Device โ”‚ โ”‚ Browser Device โ”‚ โ”‚ โ”‚ โ”‚ (็œŸๆœบ/ๆจกๆ‹Ÿๅ™จ) โ”‚ โ”‚ (็œŸๆœบ/ๆจกๆ‹Ÿๅ™จ) โ”‚ โ”‚ (ๆต่งˆๅ™จ) โ”‚ โ”‚ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚ โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ ``` ### ๆ ธๅฟƒ่ฎพ่ฎกๆ€่ทฏ #### 1. ๅˆ†ๅฑ‚ๆžถๆž„่ฎพ่ฎก - **่ฎพๅค‡ๅฑ‚**: ๆŠฝ่ฑกไธๅŒๅนณๅฐ็š„่ฎพๅค‡็ฎก็† - **้ฉฑๅŠจๅฑ‚**: ็ปŸไธ€ไธๅŒๅนณๅฐ็š„ๆ“ไฝœๆŽฅๅฃ - **ๆ‰ฉๅฑ•ๅฑ‚**: ๆไพ› AI ๅ’Œ้ซ˜็บงๅŠŸ่ƒฝ - **ๅ่ฎฎๅฑ‚**: ๆ ‡ๅ‡†ๅŒ–็š„ๅทฅๅ…ท่ฐƒ็”จๆŽฅๅฃ #### 2. ๆŽฅๅฃ็ปŸไธ€ๅŒ– ๆ‰€ๆœ‰ๅนณๅฐ้ƒฝๅฎž็Žฐ็›ธๅŒ็š„ `IDriver` ๆŽฅๅฃ๏ผŒ็กฎไฟๆ“ไฝœ็š„ไธ€่‡ดๆ€ง๏ผš ```go type IDriver interface { // ่ฎพๅค‡ไฟกๆฏๅ’Œ็Šถๆ€ Status() (types.DeviceStatus, error) DeviceInfo() (types.DeviceInfo, error) WindowSize() (types.Size, error) ScreenShot(opts ...option.ActionOption) (*bytes.Buffer, error) // ๅŸบ็ก€ๆ“ไฝœ TapXY(x, y float64, opts ...option.ActionOption) error Swipe(fromX, fromY, toX, toY float64, opts ...option.ActionOption) error Input(text string, opts ...option.ActionOption) error // ๅบ”็”จ็ฎก็† AppLaunch(packageName string) error AppTerminate(packageName string) (bool, error) // ... ๆ›ดๅคšๆ“ไฝœ } ``` #### 3. AI ่ƒฝๅŠ›้›†ๆˆ ้€š่ฟ‡ `XTDriver` ๆ‰ฉๅฑ•้ฉฑๅŠจ้›†ๆˆ AI ๆœๅŠก๏ผš ```go type XTDriver struct { IDriver // ๅŸบ็ก€้ฉฑๅŠจ่ƒฝๅŠ› CVService ai.ICVService // ่ฎก็ฎ—ๆœบ่ง†่ง‰ๆœๅŠก LLMService ai.ILLMService // ๅคง่ฏญ่จ€ๆจกๅž‹ๆœๅŠก } ``` #### 4. MCP ๅทฅๅ…ทๅŒ– ๅฐ†ๆ‰€ๆœ‰ๆ“ไฝœๅฐ่ฃ…ไธบ MCP ๅทฅๅ…ท๏ผŒๆ”ฏๆŒ AI ๆจกๅž‹็›ดๆŽฅ่ฐƒ็”จ๏ผš ```go type ActionTool interface { Name() option.ActionName Description() string Options() []mcp.ToolOption Implement() server.ToolHandlerFunc } ``` ## ๐Ÿ“– ๆ”ฏๆŒๅนณๅฐ ### Android ๅนณๅฐ - **้ฉฑๅŠจๆ–นๅผ**: ADB + UiAutomator2 - **ๆ”ฏๆŒ่ฎพๅค‡**: ็œŸๆœบใ€ๆจกๆ‹Ÿๅ™จ - **ๆœ€ไฝŽ็‰ˆๆœฌ**: Android 5.0+ - **็‰น่‰ฒๅŠŸ่ƒฝ**: ๅบ”็”จ็ฎก็†ใ€ๆ–‡ไปถไผ ่พ“ใ€ๆ—ฅๅฟ—ๆ•่Žท ### iOS ๅนณๅฐ - **้ฉฑๅŠจๆ–นๅผ**: WebDriverAgent (WDA) - **ๆ”ฏๆŒ่ฎพๅค‡**: ็œŸๆœบใ€ๆจกๆ‹Ÿๅ™จ - **ๆœ€ไฝŽ็‰ˆๆœฌ**: iOS 10.0+ - **็‰น่‰ฒๅŠŸ่ƒฝ**: ๅบ”็”จ็ฎก็†ใ€ๅ›พ็‰‡ไผ ่พ“ใ€ๆ€ง่ƒฝ็›‘ๆŽง ### HarmonyOS ๅนณๅฐ - **้ฉฑๅŠจๆ–นๅผ**: HDC (HarmonyOS Device Connector) - **ๆ”ฏๆŒ่ฎพๅค‡**: ็œŸๆœบใ€ๆจกๆ‹Ÿๅ™จ - **ๆœ€ไฝŽ็‰ˆๆœฌ**: HarmonyOS 2.0+ - **็‰น่‰ฒๅŠŸ่ƒฝ**: ๅŽŸ็”Ÿ้ธฟ่’™ๅบ”็”จๆ”ฏๆŒ ### Web ๆต่งˆๅ™จ - **้ฉฑๅŠจๆ–นๅผ**: WebDriver ๅ่ฎฎ - **ๆ”ฏๆŒๆต่งˆๅ™จ**: Chromeใ€Firefoxใ€Safariใ€Edge - **็‰น่‰ฒๅŠŸ่ƒฝ**: ๅคšๆ ‡็ญพ้กต็ฎก็†ใ€JavaScript ๆ‰ง่กŒ ## ๐Ÿš€ ๅฟซ้€Ÿๅผ€ๅง‹ ### 1. ็Žฏๅขƒๅ‡†ๅค‡ #### Android ็Žฏๅขƒ ```bash # ๅฎ‰่ฃ… Android SDK export ANDROID_HOME=/path/to/android-sdk export PATH=$PATH:$ANDROID_HOME/platform-tools # ๅฏ็”จ USB ่ฐƒ่ฏ• adb devices ``` #### iOS ็Žฏๅขƒ ```bash # ๅฎ‰่ฃ… Xcode ๅ’Œ WebDriverAgent # ้…็ฝฎๅผ€ๅ‘่€…่ฏไนฆ # ๅฏๅŠจ WDA ๆœๅŠก ``` #### AI ๆœๅŠก้…็ฝฎ ```bash # ้…็ฝฎๅคง่ฏญ่จ€ๆจกๅž‹ๆœๅŠก export OPENAI_BASE_URL=https://api.openai.com/v1 export OPENAI_API_KEY=your_api_key # ้…็ฝฎ่ฎก็ฎ—ๆœบ่ง†่ง‰ๆœๅŠก export VEDEM_IMAGE_URL=https://visual.volcengineapi.com export VEDEM_IMAGE_AK=your_access_key export VEDEM_IMAGE_SK=your_secret_key ``` ### 2. ๅŸบ็ก€ไฝฟ็”จ #### ๅˆ›ๅปบ่ฎพๅค‡ๅ’Œ้ฉฑๅŠจ ```go package main import ( "github.com/httprunner/httprunner/v5/uixt" "github.com/httprunner/httprunner/v5/uixt/option" ) func main() { // ๅˆ›ๅปบ Android ่ฎพๅค‡ device, err := uixt.NewAndroidDevice( option.WithSerialNumber("your_device_serial"), ) if err != nil { panic(err) } // ๅˆ›ๅปบๅŸบ็ก€้ฉฑๅŠจ driver, err := uixt.NewUIA2Driver(device) if err != nil { panic(err) } // ๅˆ›ๅปบๆ‰ฉๅฑ•้ฉฑๅŠจ๏ผˆ้›†ๆˆ AI ่ƒฝๅŠ›๏ผ‰ xtDriver, err := uixt.NewXTDriver(driver, option.WithCVService(option.CVServiceTypeVEDEM), option.WithLLMService(option.OPENAI_GPT_4O), ) if err != nil { panic(err) } // ๅˆๅง‹ๅŒ–ไผš่ฏ err = xtDriver.Setup() if err != nil { panic(err) } defer xtDriver.TearDown() } ``` #### ๅŸบ็ก€ๆ“ไฝœ็คบไพ‹ ```go // ่Žทๅ–ๅฑๅน•ๆˆชๅ›พ screenshot, err := xtDriver.ScreenShot() // ็‚นๅ‡ปๆ“ไฝœ err = xtDriver.TapXY(0.5, 0.5) // ็›ธๅฏนๅๆ ‡ (50%, 50%) // ๆป‘ๅŠจๆ“ไฝœ err = xtDriver.Swipe(0.5, 0.8, 0.5, 0.2) // ไปŽไธ‹ๅพ€ไธŠๆป‘ๅŠจ // ่พ“ๅ…ฅๆ–‡ๆœฌ err = xtDriver.Input("Hello World") // ๅฏๅŠจๅบ”็”จ err = xtDriver.AppLaunch("com.example.app") ``` #### AI ๆ™บ่ƒฝๆ“ไฝœ ```go import "context" // ไฝฟ็”จ่‡ช็„ถ่ฏญ่จ€ๆ‰ง่กŒๆ“ไฝœ result, err := xtDriver.LLMService.Plan(context.Background(), &ai.PlanningOptions{ UserInstruction: "็‚นๅ‡ป็™ปๅฝ•ๆŒ‰้’ฎ", Message: message, Size: screenSize, }) // ๆ™บ่ƒฝๆ–ญ่จ€ assertResult, err := xtDriver.LLMService.Assert(context.Background(), &ai.AssertOptions{ Assertion: "็™ปๅฝ•ๆŒ‰้’ฎๅบ”่ฏฅๅฏ่ง", Screenshot: screenshot, Size: screenSize, }) // ๆ™บ่ƒฝๆŸฅ่ฏข queryResult, err := xtDriver.LLMService.Query(context.Background(), &ai.QueryOptions{ Query: "ๆๅ–้กต้ขไธญ็š„ๆ‰€ๆœ‰ๆ–‡ๆœฌๅ†…ๅฎน", Screenshot: screenshot, Size: screenSize, }) ``` ### 3. ้ซ˜็บง้…็ฝฎ #### ๆททๅˆๆจกๅž‹้…็ฝฎ ```go // ไธบไธๅŒ็ป„ไปถ้…็ฝฎไธๅŒ็š„ๆœ€ไผ˜ๆจกๅž‹ config := option.NewLLMServiceConfig(option.DOUBAO_1_5_THINKING_VISION_PRO_250428). WithPlannerModel(option.DOUBAO_1_5_UI_TARS_250328). // UI็†่งฃ็”จUI-TARS WithAsserterModel(option.OPENAI_GPT_4O). // ๆŽจ็†็”จGPT-4O WithQuerierModel(option.DEEPSEEK_R1_250528) // ๆŸฅ่ฏข็”จDeepSeek xtDriver, err := uixt.NewXTDriver(driver, option.WithLLMConfig(config), ) ``` #### ไฝฟ็”จๆŽจ่้…็ฝฎ ```go configs := option.RecommendedConfigurations() xtDriver, err := uixt.NewXTDriver(driver, option.WithLLMConfig(configs["mixed_optimal"]), ) ``` ## ๐Ÿ“š ่ฏฆ็ป†ๆ–‡ๆกฃ ### ๆ ธๅฟƒๆ–‡ๆกฃ - **[่ฎพๅค‡็ฎก็†](devices.md)** - ่ฎพๅค‡ๅ‘็Žฐใ€่ฟžๆŽฅใ€้…็ฝฎๅ’Œ็ฎก็† - **[้ฉฑๅŠจๆŽฅๅฃ](drivers.md)** - ๅ„ๅนณๅฐ้ฉฑๅŠจ็š„ๅŠŸ่ƒฝๅ’Œไฝฟ็”จๆ–นๆณ• - **[ๆ“ไฝœๆŒ‡ๅ—](operations.md)** - ่ฏฆ็ป†็š„ UI ๆ“ไฝœไฝฟ็”จๆŒ‡ๅ— - **[้…็ฝฎ้€‰้กน](options.md)** - ๅฎŒๆ•ด็š„้…็ฝฎๅ‚ๆ•ฐ่ฏดๆ˜Ž ### AI ๅ’Œๅทฅๅ…ท - **[AI ๆจกๅ—](ai.md)** - LLM ๅ’Œ CV ๆœๅŠก็š„้›†ๆˆไฝฟ็”จใ€ๆ™บ่ƒฝ่ง„ๅˆ’ใ€ๆ–ญ่จ€ใ€ๆŸฅ่ฏข - **[MCP ๅทฅๅ…ท](mcp-tools.md)** - MCP ๅ่ฎฎๅ’Œๅทฅๅ…ท็ณป็ปŸ่ฏฆ่งฃ ### ๅฟซ้€Ÿๅฏผ่ˆช | ๆ–‡ๆกฃ | ๅ†…ๅฎนๆฆ‚่ฟฐ | |------|----------| | [่ฎพๅค‡็ฎก็†](devices.md) | ่ฎพๅค‡ๅ‘็Žฐใ€่ฟžๆŽฅใ€ๅคš่ฎพๅค‡็ฎก็†ใ€ๆ•…้šœๆŽ’้™คใ€ๅนณๅฐ็‰นๆœ‰ๅŠŸ่ƒฝ | | [้ฉฑๅŠจๆŽฅๅฃ](drivers.md) | IDriver ๆŽฅๅฃใ€ๅนณๅฐ้ฉฑๅŠจใ€XTDriver ๆ‰ฉๅฑ•ใ€้€‰ๆ‹ฉๅ™จ็ฑปๅž‹ | | [ๆ“ไฝœๆŒ‡ๅ—](operations.md) | ็‚นๅ‡ปใ€ๆป‘ๅŠจใ€่พ“ๅ…ฅใ€ๅบ”็”จ็ฎก็†ใ€ๅฑๅน•ๆ“ไฝœ | | [AI ๆจกๅ—](ai.md) | ๆ™บ่ƒฝ่ง„ๅˆ’ใ€ๆ™บ่ƒฝๆ–ญ่จ€ใ€ๆ™บ่ƒฝๆŸฅ่ฏขใ€CV ่ฏ†ๅˆซใ€ๅคšๆจกๅž‹้…็ฝฎ | | [MCP ๅทฅๅ…ท](mcp-tools.md) | ๅทฅๅ…ทๅˆ†็ฑปใ€ๅฎž็Žฐๆ–นๅผใ€ๆ‰ฉๅฑ•ๅผ€ๅ‘ | | [้…็ฝฎ้€‰้กน](options.md) | ่ฎพๅค‡้…็ฝฎใ€AI ้…็ฝฎใ€็Žฏๅขƒๅ˜้‡ใ€ๆœ€ไฝณๅฎž่ทต | ## ๐Ÿ”ง ไพ่ต–้กน็›ฎ ### ๆ ธๅฟƒไพ่ต– - [electricbubble/gwda](https://github.com/electricbubble/gwda) - iOS WebDriverAgent ๅฎขๆˆท็ซฏ - [electricbubble/guia2](https://github.com/electricbubble/guia2) - Android UiAutomator2 ๅฎขๆˆท็ซฏ - [mark3labs/mcp-go](https://github.com/mark3labs/mcp-go) - MCP ๅ่ฎฎ Go ๅฎž็Žฐ ### AI ๆœๅŠกไพ่ต– - [cloudwego/eino](https://github.com/cloudwego/eino) - ็ปŸไธ€็š„ LLM ๆŽฅๅฃ - ็ซๅฑฑๅผ•ๆ“Ž VEDEM - ่ฎก็ฎ—ๆœบ่ง†่ง‰ๆœๅŠก - OpenAI GPT-4O - ๅคง่ฏญ่จ€ๆจกๅž‹ๆœๅŠก - ่ฑ†ๅŒ…็ณปๅˆ—ๆจกๅž‹ - ไธ“ไธš UI ่‡ชๅŠจๅŒ–ๆจกๅž‹ ## ๐Ÿค ่ดก็ŒฎๆŒ‡ๅ— ๆˆ‘ไปฌๆฌข่ฟŽ็คพๅŒบ่ดก็Œฎ๏ผ่ฏทๆŸฅ็œ‹ไปฅไธ‹่ต„ๆบ๏ผš - [่ดก็ŒฎๆŒ‡ๅ—](CONTRIBUTING.md) - ๅฆ‚ไฝ•ๅ‚ไธŽ้กน็›ฎ่ดก็Œฎ - [ๅผ€ๅ‘็Žฏๅขƒๆญๅปบ](development.md) - ๅผ€ๅ‘็Žฏๅขƒ้…็ฝฎ - [ไปฃ็ ่ง„่Œƒ](coding-standards.md) - ไปฃ็ ้ฃŽๆ ผๅ’Œ่ง„่Œƒ - [ๆต‹่ฏ•ๆŒ‡ๅ—](testing.md) - ๆต‹่ฏ•็ผ–ๅ†™ๅ’Œๆ‰ง่กŒ ## ๐Ÿ“„ ่ฎธๅฏ่ฏ ๆœฌ้กน็›ฎ้‡‡็”จ Apache 2.0 ่ฎธๅฏ่ฏ๏ผŒ่ฏฆๆƒ…่ฏทๆŸฅ็œ‹ [LICENSE](LICENSE) ๆ–‡ไปถใ€‚ ## ๐Ÿ™ ่‡ด่ฐข ๆ„Ÿ่ฐขไปฅไธ‹ๅผ€ๆบ้กน็›ฎ็š„่ดก็Œฎ๏ผš - [appium-uiautomator2-server](https://github.com/appium/appium-uiautomator2-server) - Android ่‡ชๅŠจๅŒ–ๅŸบ็ก€ - [appium/WebDriverAgent](https://github.com/appium/WebDriverAgent) - iOS ่‡ชๅŠจๅŒ–ๅŸบ็ก€ - [danielpaulus/go-ios](https://github.com/danielpaulus/go-ios) - iOS ๅฎขๆˆท็ซฏๅบ“ --- **HttpRunner UIXT** - ่ฎฉ UI ่‡ชๅŠจๅŒ–ๆต‹่ฏ•ๆ›ดๆ™บ่ƒฝใ€ๆ›ด็ฎ€ๅ•๏ผ