# Windows驱动程序
---
Appium支持自动运行Windows PC桌面应用程序,该驱动程序依赖于微软的项目[WinAppDriver](https://github.com/Microsoft/WinAppDriver)。WinAppDriver是一个与appium兼容的WebDriver服务器, 适用于Windows桌面应用程序,
通常缩写为WAD。WAD通常与Appium捆绑在一起安装,不需要单独安装。
Windows驱动程序支持测试通用Windows平台(UWP)和经典Windows(Win32)应用程序。
除了WAD存储库,Appium也在[appium-windows-driver](https://github.com/appium/appium-windows-driver)存储库中进行开发。
## 需求和支持
(除了Appium的一般要求外)
* 装有Windows 10或更高版本的Windows PC
* 支持进入管理员模式
## 使用
使用Windows驱动程序启动回话的方法:
* 确保在[新的会话请求](https://github.com/JiangSine/appium/blob/master../drivers/windows.md#TODO)中包含platformName[功能](https://github.com/JiangSine/appium/blob/master../drivers/windows.md#TODO)且值为Windows
* 确保deviceName功能设置为WindowsPC
* 至少包括适当的应用程序功能(请参阅下文)
## 功能
Windows驱动程序支持许多标准的[Appium功能](https://github.com/JiangSine/appium/blob/master../writing-running-appium/caps.md)。请参阅下面的内容,了解如何将他们专门用于Windows驱动程序。
### 设置
确保打开[开发人员模式](https://docs.microsoft.com/en-us/windows/uwp/get-started/enable-your-device-for-development)即可进行Windows应用测试。
在运行Appium时,无论是通过Appium Desktop启动还是命令行启动,请确保以管理员身份进行操作。
### 为Windows驱动程序编写测试脚本
您可以参照现有示例:
#### Java样本
1. 在Java IDE(例如IntelliJ)中,将示例文件夹作为现有项目打开。例如:[CalculatorTest](https://github.com/Microsoft/WinAppDriver/tree/master/Samples/Java/CalculatorTest).
2. 在Java IDE中构建并运行测试。
#### C#示例
1. 在[CalculatorTest](https://github.com/Microsoft/WinAppDriver/tree/master/Samples/C%23/CalculatorTest)文件下拉出并打开CalculatorTest.sln
2. 在带有测试解决方案的Visual Studio 2015中打开构建测试,选择测试->运行->所有测试。
#### JavaScript/node示例
1. 使用selenium-webdriver
[Examples on selenium-appium](https://github.com/react-native-windows/selenium-appium/tree/master/example)
[selenium-webdriver-winappdriver-example](selenium-webdriver-winappdriver-example)
如果您想从头开始编写测试,则可以选择Appium/Selenium支持的任何编程语言或工具来编写测试脚本。 在下面的示例中,我们将使用Microsoft Visual Studio 2015在C#中编写测试脚本。
#### 创建测试项目
1. 打开Microsoft Visual Studio 2015
2. 创建测试项目和解决方案。 选择“新建项目”>“模板”>“ Visual C#”>“测试”>“单元测试项目”
3. 创建完成后,选择“项目”>“管理NuGet程序包...”>浏览并搜索Appium.WebDriver
4. 为测试项目安装Appium.WebDriver NuGet软件包
5. 开始编写测试(请参阅[示例]下的示例代码)
#### 通用Windows平台应用程序测试
要测试UWP应用,您可以使用任何Selenium支持的语言,只需在应用功能条目中指定被测试应用的ID。 以下是使用C#编写的案例,针对Windows Alarms&Clock应用程序创建测试会话的示例:
```
// Launch the AlarmClock app
DesiredCapabilities appCapabilities = new DesiredCapabilities();
appCapabilities.SetCapability("app", "Microsoft.WindowsAlarms_8wekyb3d8bbwe!App");
AlarmClockSession = new WindowsDriver<WindowsElement>(new Uri("http://127.0.0.1:4723"), appCapabilities);
// Control the AlarmClock app
AlarmClockSession.FindElementByAccessibilityId("AddAlarmButton").Click();
AlarmClockSession.FindElementByAccessibilityId("AlarmNameTextBox").Clear();
```
测试自己编写的应用程序时,可以在生成的AppX\\vs.appxrecipe文件中找到应用程序ID,如下:
`RegisteredUserNmodeAppID` node. E.g. `c24c8163-548e-4b84-a466-530178fc0580_scyf5npe3hv32!App`
#### 经典Windows App测试
要测试经典Windows应用程序,可以使用任何Selenium支持的语言,并在应用程序功能条目中指定被测应用程序的完整可执行路径。 以下是为Windows记事本应用程序创建测试会话的示例:
```
// Launch Notepad
DesiredCapabilities appCapabilities = new DesiredCapabilities();
appCapabilities.SetCapability("app", @"C:\Windows\System32\notepad.exe");
NotepadSession = new WindowsDriver<WindowsElement>(new Uri("http://127.0.0.1:4723"), appCapabilities);
// Control the AlarmClock app
```
#### 开始会话
如上所述,请使用以下功能来确保获得Windows App自动化会话:
`platformName:Windows deviceName:WindowsPC app:`用于测试的Windows应用程序的appID,或.exe文件的路径
#### 检查UI元素
默认情况下,Microsoft Visual Studio 2015包括Windows SDK,该SDK提供了很好的工具来检查您正在测试的应用程序。 通过该工具,您可以使用Windows应用程序驱动程序查询的每个UI元素/节点。 可以在Windows SDK文件夹(例如C:\\Program Files(x86)\\Windows Kits\\10\\bin\\x86)下找到inspect.exe工具。 该工具将显示各种元素属性。 下表显示了应使用哪种Appium定位器策略来查找具有相应属性的元素。
| 定位策略 | 匹配属性 |
| :--- | :--- |
| accessibility id | AutomationId |
| class name | ClassName |
| name | Name |
- 关于TesterHome和MTSC
- 关于Appium
- 简介
- Appium 客户端
- 入门指南
- 已支持的平台
- API 文档
- Appium驱动
- XCUITest (iOS)
- XCUITest Real Devices (iOS)
- UIAutomation (iOS)
- UIAutomation Safari Launcher (iOS)
- UIAutomator (Android)
- UIAutomator2 (Android)
- Espresso (Android)
- Windows
- Mac
- Appium命令
- Status
- Execute Mobile Command
- Session
- Create
- End
- Get Session Capabilities
- Go Back
- Screenshot
- Source
- Timeouts
- Timeouts
- Implicit Wait
- Async Script
- Orientation
- Get Orientation
- Set Orientation
- Geolocation
- Get Geolocation
- Set Geolocation
- Logs
- Get Log Types
- Get Logs
- Events
- Log event
- Get events
- Settings
- Update Settings
- Get Device Settings
- Settings
- Update Settings
- Get Device Settings
- Execute Driver Script
- Device
- Activity
- Start Activity
- Current Activity
- Current Package
- App
- Install App
- Is App Installed
- Launch App
- Background App
- Close App
- Reset App
- Remove App
- Activate App
- Terminate App
- Get App State
- Get App Strings
- End Test Coverage
- Clipboard
- Get Clipboard
- Set Clipboard
- Emulator
- Power AC
- Power Capacity
- Files
- Push File
- Pull File
- Pull Folder
- Interactions
- Shake
- Lock
- Unlock
- Is Locked
- Rotate
- Keys
- Press keycode
- Long press keycode
- Hide Keyboard
- Is Keyboard Shown
- Network
- Toggle Airplane Mode
- Toggle Data
- Toggle WiFi
- Toggle Location Services
- Send SMS
- GSM Call
- GSM Signal
- GSM Voice
- Network Speed
- Performance Data
- Get Performance Data
- Performance Data Types
- Screen Recording
- Start Screen Recording
- Stop Screen Recording
- Simulator
- Perform Touch ID
- Toggle Touch ID Enrollment
- System
- Open Notifications
- System Bars
- System Time
- Display density
- Authentication
- Finger Print
- Element
- Find Element
- Find Elements
- Actions
- Click
- Send Keys
- Clear
- Attributes
- Text
- Name
- Attribute
- Selected
- Enabled
- Displayed
- Location
- Size
- Rect
- CSS Property
- Location in View
- Other
- Submit
- Active Element
- Equals Element
- Context
- Get Context
- Get All Contexts
- Set Context
- Interactions
- Mouse
- Move To
- Click
- Double Click
- Button Down
- Button Up
- Touch
- Single Tap
- Double Tap
- Move
- Touch Down
- Touch Up
- Long Press
- Scroll
- Flick
- Multi Touch Perform
- Touch Perform
- W3C Actions
- Web
- Window
- Set Window
- Close Window
- Get Handle
- Get Handles
- Get Title
- Get Window Size
- Set Window Size
- Get Window Position
- Set Window Position
- Maximize Window
- Navigation
- Go to URL
- Get URL
- Back
- Forward
- Refresh
- Storage
- Get All Cookies
- Set Cookie
- Delete Cookie
- Delete All Cookies
- Frame
- Switch to Frame
- Switch to Parent Frame
- Execute Async
- Execute
- 编写 & 运行Appium脚本
- Running Tests
- Desired Capabilities
- The --default-capabilities flag
- Finding Elements
- Touch Actions
- CLI Arguments
- Server Security
- Web/Web Views
- Mobile Web Testing
- Automating Hybrid Apps
- Using ios-webkit-debug-proxy
- Using Chromedriver
- Image Comparison
- iOS
- Low-Level Insights on iOS Input Events
- XCUITest Mobile Gestures
- XCUITest Mobile App Management
- iOS Pasteboard Guide
- iOS Predicate Guide
- iOS Touch ID Guide
- iOS Install Certificate
- tvOS support
- Pushing/Pulling files
- Audio Capture
- Android
- Low-Level Insights on Android Input Events
- UiSelector Guide
- Espresso Datamatcher Guide
- Android Code Coverage Guide
- Activities Startup Troubleshooting Guide
- How To Execute Shell Commands On The Remote Device
- Android Device Screen Streaming
- How To Emulate IME Actions Generation
- How To Test Android App Bundle
- Other
- Reset Strategies
- Network Connection Guide
- Using Unicode with Appium
- Troubleshooting
- Tutorial
- Swipe Tutorial
- Screen
- Element
- Partial screen
- Simple
- Multiple scroll views
- Add scroll layout
- Tricks and Tips
- Screen
- Element
- Element search
- Fast
- Slow
- Guide
- 进阶概念
- 定位图像中的元素
- 使用定位元素的插件
- 迁移到 XCUITest
- 在 Appium 中使用 Selenium Grid
- Appium Logs Filtering
- 跨域 iframes
- 使用自定义 WDA 服务器
- 使用不同版本的 Xcode 运行
- The Event Timings API
- 并行测试的设置
- The Settings API
- Memory Collection
- 向Appium项目做贡献
- 从源代码运行 Appium
- 开发者概述
- 标准开发命令
- Appium 风格指南
- 如何编写文档
- Appium 包结构
- 鸣谢