我使用Winium + Java进行Windows应用程序的自动化测试,并尝试访问工具栏菜单 当我尝试使用UI Automation Verify检测元素时,我无法在工具栏元素下看到子元素,如下面的屏幕截图所示。 enter image description here
我尝试了下面的java代码,但它没有工作
WebElement el = driver.findElement(By.id('59398'));
el.click();
WebElement child = el.findElement(By.name('Start'));
child.click();
当我尝试
时driver.findElement(By.name"Start').click();
它点击了我的Windows开始菜单,而不是我的应用程序的菜单。
有没有办法访问此工具栏下的项目?
答案 0 :(得分:0)
您可以尝试使用其他UI Inspector 例如。 UI SPY或Inspector.exe
您的ID可能不是AutomationID(进程ID?)
您应该找到一个主窗口(您的应用程序的父级)(计算示例)并获取一个参数,如AutomationId,ClassName或Name
答案 1 :(得分:0)
我看到这是MFC应用程序,这是一个应用程序端MFC库问题。如果您使用Inspect.exe将鼠标悬停在工具栏按钮上,则信息可用但您无法从层次结构中访问此按钮(按钮无论如何都没有父项)。可能的解决方法涉及组合的Win32 API和UI自动化方法:
ElementFromPoint
方法并获取实际文本以选择正确的按钮。P.S。我的建议理论上适用于Java + Winium。但我无法估计复杂性,因为我不是Java专家。以下是Python解决方案。
我们计划在pywinauto中实现这种混合方式。见issue #413。它包含Python代码示例如何做到这一点。我们还没有机会整合它。
from ctypes.wintypes import tagPOINT
import pywinauto
app = pywinauto.Application().start(r'.\apps\MFC_samples\RebarTest.exe')
menu_bar = app.RebarTest.MenuBar.wrapper_object()
point = menu_bar.button(0).rectangle().mid_point()
point = menu_bar.client_to_screen(point)
elem = pywinauto.uia_defines.IUIA().iuia.ElementFromPoint(tagPOINT(point[0], point[1]))
element = pywinauto.uia_element_info.UIAElementInfo(elem)
print(element.name)