またも「RPA風に使えるかも」関連.
appium & Windows Application Driver 経由でのwindowsアプリ操作を期待しましたが、 まず、appium の起動は不要でした。 また、単純なボタンのクリック等はできましたが、要素の探索等はできませんでした。 (詳しいドキュメントを見つけることができなかった為)
参考url
- https://qiita.com/umasaki/items/105d9e12f45079ead251
- https://qiita.com/yuuhu04/items/5a96608ad96eccee34a0
install WindowsApplicationDriver 関連
WindowsApplicationDriver自体は、 https://github.com/Microsoft/WinAppDriver から インストーラをダウンロードし、実行するだけで、 C:\Program Files (x86)\Windows Application Driver にinstallされます
更にnodejsやpythonのモジュールをインストールすれば完了
C:\Users\end0t>npm install --global --production windows-build-tools C:\Users\end0t>npm install appium-windows-driver C:\Users\end0t>pip install Appium-Python-Client C:\Users\end0t>pip install setuptools
install inspect.exe
捜査対象のアプリの要素名を調べる為、inspect.exe もあると便利です
https://developer.microsoft.com/ja-jp/windows/downloads/sdk-archive からダウンロードし、インストールすると、以下に配備されます。
C:\Program Files (x86)\Windows Kits\10\bin\10.0.17763.0\x64\inspect.exe
軽く動作確認
PS C:\Program Files (x86)\Windows Application Driver> pwd Path ---- C:\Program Files (x86)\Windows Application Driver PS C:\Program Files (x86)\Windows Application Driver> .\WinAppDriver.exe Windows Application Driver listening for requests at: http://127.0.0.1:4723/ Press ENTER to exit.
↑こちらのように WinAppDriver.exe を起動した状態で ↓microsoftから配布されているサンプルscriptが動作すればOK
""" //****************************************************************************** // // Copyright (c) 2016 Microsoft Corporation. All rights reserved. // // This code is licensed under the MIT License (MIT). // // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN // THE SOFTWARE. // //****************************************************************************** """ import unittest from appium import webdriver class SimpleCalculatorTests(unittest.TestCase): def setUp(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) def tearDown(self): self.driver.quit() def test_initialize(self): self.driver.find_element_by_accessibility_id("clearButton").click() self.driver.find_element_by_accessibility_id("num7Button").click() result = self.driver.find_element_by_accessibility_id("CalculatorResults") self.assertIn(" 7 ", str(result.text)) def test_addition(self): self.driver.find_element_by_accessibility_id("num1Button").click() self.driver.find_element_by_accessibility_id("plusButton").click() self.driver.find_element_by_accessibility_id("num7Button").click() self.driver.find_element_by_accessibility_id("equalButton").click() result = self.driver.find_element_by_accessibility_id("CalculatorResults") self.assertIn( " 8 ", str(result.text)) def test_combination(self): self.driver.find_element_by_accessibility_id("num7Button").click() self.driver.find_element_by_accessibility_id("multiplyButton").click() self.driver.find_element_by_accessibility_id("num9Button").click() self.driver.find_element_by_accessibility_id("plusButton").click() self.driver.find_element_by_accessibility_id("num1Button").click() self.driver.find_element_by_accessibility_id("equalButton").click() self.driver.find_element_by_accessibility_id("divideButton").click() self.driver.find_element_by_accessibility_id("num8Button").click() self.driver.find_element_by_accessibility_id("equalButton").click() result = self.driver.find_element_by_accessibility_id("CalculatorResults") self.assertIn( " 8 ", str(result.text)) def test_division(self): self.driver.find_element_by_accessibility_id("num8Button").click() self.driver.find_element_by_accessibility_id("num8Button").click() self.driver.find_element_by_accessibility_id("divideButton").click() self.driver.find_element_by_accessibility_id("num1Button").click() self.driver.find_element_by_accessibility_id("num1Button").click() self.driver.find_element_by_accessibility_id("equalButton").click() result = self.driver.find_element_by_accessibility_id("CalculatorResults") self.assertIn( " 8 ", str(result.text)) def test_multiplication(self): self.driver.find_element_by_accessibility_id("num9Button").click() self.driver.find_element_by_accessibility_id("multiplyButton").click() self.driver.find_element_by_accessibility_id("num9Button").click() self.driver.find_element_by_accessibility_id("equalButton").click() result = self.driver.find_element_by_accessibility_id("CalculatorResults") self.assertIn( " 81 ", str(result.text)) def test_subtraction(self): self.driver.find_element_by_accessibility_id("num9Button").click() self.driver.find_element_by_accessibility_id("minusButton").click() self.driver.find_element_by_accessibility_id("num1Button").click() self.driver.find_element_by_accessibility_id("equalButton").click() result = self.driver.find_element_by_accessibility_id("CalculatorResults") self.assertIn( " 8 ", str(result.text)) if __name__ == '__main__': suite = unittest.TestLoader().loadTestsFromTestCase(SimpleCalculatorTests) unittest.TextTestRunner(verbosity=2).run(suite)
開発者モード設定画面で、エラー?が表示されましたが、気にせず進めてもよさそうです