1.WinAppDriverについて
1 はじめに
-
WinAppDriver の正式名は Windows Application Driver で、ユーザーが Selenium が Web を操作するのと同じように Windows アプリケーションを操作できるようにするための API を提供します。
-
サポートされるシステムは、Windows 10 (Home および Pro) および Windows Server 2016 です。
-
ソースコードはまだオープンソースではありません
-
WinAppDriver は、独立して実行することも、appium のプラグインとして使用することもできます。
2.サポートアプリケーションの種類
-
UWP – ユニバーサル Windows プラットフォーム。ユニバーサル アプリまたはモダン アプリとも呼ばれ、Microsoft の最新のデスクトップ アプリケーション テクノロジです。XAML ベースです。Windows 10 マシンでのみ実行可能
-
WPF - これも XAML ベースで、より成熟しており、どの Windows バージョンでも実行でき、2006 年から存在しています。
-
WinForms - 古いテクノロジーの 1 つで、現在は主にレガシー アプリケーションで使用されています。
WPF と WinForms は、インターフェイス レンダリング メソッドの 2 つのセットです。1 つは、GDI を通じて描画される、従来の Windows インターフェイス要素のカプセル化です。もう 1 つは、まったく新しい dx レンダリング インターフェイスで、これも従来の Windows コントロールへの依存から脱却しており、歴史的な問題がなく、理論的にはよりクールなインターフェイスを表示できます。
-
MFC/クラシック Windows - MFC は、通常 Win32 アプリケーションと組み合わせられる UI ライブラリです。このオプションは通常、低レベルの C++ 処理でさらなる効率が必要な場合、または Microsoft 以外のプラットフォームをサポートする場合に選択されます。
3. リソース
-
WinAppDriver
https://github.com/microsoft/WinAppDriver/releases/tag/v1.2.1 -
位置決めツール FlaUInspect
https://github.com/FlaUI/FlaUInspect/WinAppDriver
をリリース -
位置決めツール UIRcorder https://github.com/microsoft/WinAppDriver/tree/master/Tools/UIRecorder
-
位置決めツール検査
Microsoft 公式ツールが Windows SDK に統合されています
UIRecorder (以下では説明しません。参考とメモのみ)
-
Visual Studio で WinAppDriverUIRecorder.sln を開きます
-
「デバッグ」>「デバッグの開始」を選択するか、単に「実行」を選択します。
4. サポートされる測位方法
2. 構成
1. Windowsの開発者モードをオンにする
そうですね、これは携帯電話ではなく、Windows でも利用できます
ステップ 1: 開発者設定を検索する
ステップ 2: 開発者モードをオンにする
ステップ 3: アクティベーションを確認する
2.WinAppDriverを起動します
-
開発者モードをオンにしない場合のヒント
C:\Program Files (x86)\Windows Application Driver>WinAppDriver.exe
開発者モードが有効になっていません。設定で有効にして、Windows アプリケーション ドライバーを再起動します。
初期化に失敗しました: 0x80004005
-
winappdriverをオンにしてから起動します
C:\Program Files (x86)\Windows Application Driver>WinAppDriver.exe
Windows アプリケーション ドライバーは次の場所で要求を待機しています: http://127.0.0.1:4723/
Enter キーを押して終了します。
-
このように起動することもできます
WinAppDriver.exe 4727
WinAppDriver.exe 10.0.0.10 4725
WinAppDriver.exe 10.0.0.10 4723/wd/hub # 推奨
3. 例
appium-python-client バージョン 2.0 以降は使用しないでください。ここでは 1.2.0 を使用します。
ノート
メモ帳など
from appium import webdriver
des_cap = {}
des_cap['app'] = r'C:\Windows\System32\notepad.exe'
driver = webdriver.Remote(command_executor='http://127.0.0.1:4723/wd/hub',
desired_capabilities=des_cap)
driver.implicitly_wait(5)
driver.find_element_by_name('文件(F)').click()
from time import sleep
sleep(2)
driver.find_element_by_name('保存(S) Ctrl+S').click()
# driver.find_element_by_name('退出(X)').click()
sleep(1)
import pyautogui
pyautogui.PAUSE = 0.5
pyautogui.typewrite(r'D:\hello.txt')
pyautogui.press('enter')
ここで難しいのは、Save(S) Ctrl+S の取得です。
ここではinspect.exeを使用する必要があります
電卓
このようなコードを書くとよいでしょう
from appium import webdriver
des_cap = {}
des_cap['app'] = r'C:\Windows\System32\calc.exe'
driver = webdriver.Remote(command_executor='http://127.0.0.1:4723/wd/hub',
desired_capabilities=des_cap)
driver.implicitly_wait(5)
しかし、エラーが報告されます
Traceback (most recent call last):
File "D:/demo_calc.py", line 5, in <module>
desired_capabilities=des_cap)
File "D:\Python37\lib\site-packages\appium\webdriver\webdriver.py", line 157, in __init__
AppiumConnection(command_executor, keep_alive=keep_alive), desired_capabilities, browser_profile, proxy
File "D:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 157, in __init__
self.start_session(capabilities, browser_profile)
File "D:\Python37\lib\site-packages\appium\webdriver\webdriver.py", line 226, in start_session
response = self.execute(RemoteCommand.NEW_SESSION, parameters)
File "D:\Python37\lib\site-packages\selenium\webdriver\remote\webdriver.py", line 321, in execute
self.error_handler.check_response(response)
File "D:\Python37\lib\site-packages\selenium\webdriver\remote\errorhandler.py", line 242, in check_response
raise exception_class(message, screen, stacktrace)
selenium.common.exceptions.WebDriverException: Message: Failed to locate opened application window with appId: C:\Windows\System32\calc.exe, and processId: 4472
进程已结束,退出代码为 1
電卓を開き、PowerShell で次のコマンドを実行します。
Get-StartApps |Select-String "计算器"
# 输出
@{Name=计算器; AppID=Microsoft.WindowsCalculator_8wekyb3d8bbwe!App} # 你要的是这里的AppID # 同理,记事本你也可以得到其appid,并自动化
コード
from appium import webdriver
des_cap = {}
des_cap['app'] = r'Microsoft.WindowsCalculator_8wekyb3d8bbwe!App'
driver = webdriver.Remote(command_executor='http://127.0.0.1:4723/wd/hub',
desired_capabilities=des_cap)
driver.implicitly_wait(5)
driver.find_element_by_name('一').click() # 这些定位你仍然需要inspect
driver.find_element_by_name('二').click()
driver.find_element_by_name('加').click()
driver.find_element_by_name('三').click()
driver.find_element_by_name('四').click()
driver.find_element_by_name('等于').click()
# 通过inspect 获取 automationID
print(driver.find_element_by_accessibility_id('CalculatorResults').text) # 得到的是 ·显示为 46· 你仍然要处理才能做测试
driver.quit()
これを試して、アプリケーションに基づいてカプセル化できます。ここに持っていきます。
電卓検定(公式サイト)
走らせたわけではないので参考程度に、長さを伸ばすためだと思ってください。
# https://raw.githubusercontent.com/microsoft/WinAppDriver/master/Samples/Python/calculatortest.py
import unittest
from appium import webdriver
class SimpleCalculatorTests(unittest.TestCase):
@classmethod
def setUpClass(self):
#set up appium
desired_caps = {}
desired_caps["app"] = "Microsoft.WindowsCalculator_8wekyb3d8bbwe!App"
self.driver = webdriver.Remote(
command_executor='http://127.0.0.1:4723',
desired_capabilities= desired_caps)
@classmethod
def tearDownClass(self):
self.driver.quit()
def getresults(self):
displaytext = self.driver.find_element_by_accessibility_id("CalculatorResults").text
displaytext = displaytext.strip("Display is " )
displaytext = displaytext.rstrip(' ')
displaytext = displaytext.lstrip(' ')
return displaytext
def test_initialize(self):
self.driver.find_element_by_name("Clear").click()
self.driver.find_element_by_name("Seven").click()
self.assertEqual(self.getresults(),"7")
self.driver.find_element_by_name("Clear").click()
def test_addition(self):
self.driver.find_element_by_name("One").click()
self.driver.find_element_by_name("Plus").click()
self.driver.find_element_by_name("Seven").click()
self.driver.find_element_by_name("Equals").click()
self.assertEqual(self.getresults(),"8")
def test_combination(self):
self.driver.find_element_by_name("Seven").click()
self.driver.find_element_by_name("Multiply by").click()
self.driver.find_element_by_name("Nine").click()
self.driver.find_element_by_name("Plus").click()
self.driver.find_element_by_name("One").click()
self.driver.find_element_by_name("Equals").click()
self.driver.find_element_by_name("Divide by").click()
self.driver.find_element_by_name("Eight").click()
self.driver.find_element_by_name("Equals").click()
self.assertEqual(self.getresults(),"8")
def test_division(self):
self.driver.find_element_by_name("Eight").click()
self.driver.find_element_by_name("Eight").click()
self.driver.find_element_by_name("Divide by").click()
self.driver.find_element_by_name("One").click()
self.driver.find_element_by_name("One").click()
self.driver.find_element_by_name("Equals").click()
self.assertEqual(self.getresults(),"8")
def test_multiplication(self):
self.driver.find_element_by_name("Nine").click()
self.driver.find_element_by_name("Multiply by").click()
self.driver.find_element_by_name("Nine").click()
self.driver.find_element_by_name("Equals").click()
self.assertEqual(self.getresults(),"81")
def test_subtraction(self):
self.driver.find_element_by_name("Nine").click()
self.driver.find_element_by_name("Minus").click()
self.driver.find_element_by_name("One").click()
self.driver.find_element_by_name("Equals").click()
self.assertEqual(self.getresults(),"8")
if __name__ == '__main__':
suite = unittest.TestLoader().loadTestsFromTestCase(SimpleCalculatorTests)
unittest.TextTestRunner(verbosity=2).run(suite)
最後に:以下の完全なソフトウェア テスト ビデオ チュートリアルが編集され、アップロードされています。必要な友人は自分で入手できます[100% 無料保証]
ソフトウェアテスト面接文書
私たちは高給の仕事を見つけるために勉強しなければなりません。以下の面接の質問は、アリババ、テンセント、バイトなどの一流インターネット企業の最新の面接資料からのものであり、バイトの上司の中には権威ある回答をしている人もいます。 set 面接情報に基づいて、誰もが満足のいく仕事を見つけることができると思います。