>source

응용 프로그램의 UI 테스트 자동화를 위해 노력하고 있으며 Windows의 메뉴 항목에 문제가 있습니다. Fwiw, 자매 응용 프로그램을 위해 Mac에서 작업하고 있습니다. Python에서 Appium을 사용하고 있습니다.

Inspect.exe를 사용하여 메뉴 트리를 찾을 수 있고 최상위 메뉴를 클릭 한 다음 드롭 다운을 열고 여기에서 메뉴 항목을 찾고 싶습니다. 그러나 WinAppDriver가이 오류와 함께 실패합니다. {"status":105,"value":{"error":"element not interactable","message":"An element command could not be completed because the element is not pointer- or keyboard interactable."}}

아래의 파이썬은 문제를 재현합니다.

import time
import unittest
from appium import webdriver
app_exe_path = "C:\\Program Files\\Phase One\\Capture One 12\\CaptureOne.exe"
menu_name = "Select"
menu_item_name = "First"
switch_window = True
# app_exe_path = "C:\\Windows\\Notepad.exe"
# menu_name = "File"
# menu_item_name = "Open..."
# switch_window = False

class ClickApplicationMenuItem(unittest.TestCase):
    def test_click_application_menu_item(self):
        driver = webdriver.Remote(
            command_executor="http://localhost:4723",
            desired_capabilities={"app": app_exe_path},
        )
        if switch_window:
            time.sleep(5) # non-optimal code for the sake of a simple repro
            handles = driver.window_handles
            driver.switch_to.window(handles[0])
        menu = driver.find_element_by_name(menu_name)
        menu.click() # fails in the Notepad case
        item = menu.find_element_by_name(menu_item_name)
        item.click() # fails in the CaptureOne case

if __name__ == "__main__":
    unittest.main()

메뉴 항목을 클릭하는 방법에 대한 조언이 있습니까?


  • 답변 # 1

    여기 메뉴 항목에 대한 작업이 끝났습니다 ( menu.click() 를 유지합니다)  그것이 응용 프로그램에서 작동하기 때문에 테스트 중입니다) :

      from selenium.webdriver.common.action_chains import ActionChains
       actions = ActionChains(driver)
       actions.click(item)
       actions.perform()
    
    

  • 답변 # 2

    이러한 요소를 찾을 수 있으므로 해당 속성에 액세스 할 수 있다고 가정합니다. 간단한 해결 방법은 요소 자체를 클릭하는 대신 요소 좌표를 클릭하는 것입니다. 일반적으로 좌표를 클릭하는 것은 좋지 않지만 요소 자체에서 좌표를 가져 오기 때문에 문제가 없습니다.

    다음과 같이 해보십시오 :

    menu = driver.find_element_by_name(menu_name)
    driver.Mouse.Click(menu.coordinates)
    item = menu.find_element_by_name(menu_item_name)
    driver.Mouse.Click(item.coordinates)
    
    

    마우스 기능이 더 이상 사용되지 않으며 Actions 라는 경고를 받았습니다.  또는 ActionBuilder  클래스를 사용해야합니다. 이러한 옵션을 탐색 할 수도 있지만 winappdriver의 github 페이지에서 2018 년 3 월에 Actions 에 관한 문제가 발견되었습니다.  수업. 왜 닫혀 있는지 확실하지 않습니다. 좌표를 클릭하는 다른 방법을 찾을 수 있습니다.

    자원 : 와이즈 비즈  문제

    Actions

관련 자료

  • 이전 javascript - URL에서 fbx 파일로드 – 가능합니까?
  • 다음 ruby on rails - Instagram 추종자 스크랩을위한 단위 테스트