Winium - 如果该栏没有孩子,如何访问工具栏项目

时间:2017-05-24 14:27:05

标签: java automation

我使用Winium + Java进行Windows应用程序的自动化测试,并尝试访问工具栏菜单 当我尝试使用UI Automation Verify检测元素时,我无法在工具栏元素下看到子元素,如下面的屏幕截图所示。 enter image description here

但我的工具栏肯定有子菜单项,如截图,我需要访问它们。 console output from the above script

我尝试了下面的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开始菜单,而不是我的应用程序的菜单。

有没有办法访问此工具栏下的项目?

2 个答案:

答案 0 :(得分:0)

您可以尝试使用其他UI Inspector 例如。 UI SPY或Inspector.exe

您的ID可能不是AutomationID(进程ID?)

您应该找到一个主窗口(您的应用程序的父级)(计算示例)并获取一个参数,如AutomationId,ClassName或Name

enter image description here

答案 1 :(得分:0)

我看到这是MFC应用程序,这是一个应用程序端MFC库问题。如果您使用Inspect.exe将鼠标悬停在工具栏按钮上,则信息可用但您无法从层次结构中访问此按钮(按钮无论如何都没有父项)。可能的解决方法涉及组合的Win32 API和UI自动化方法:

  1. 使用Win32 API获取按钮矩形(但没有文本)。
  2. 使用UI Automation API的ElementFromPoint方法并获取实际文本以选择正确的按钮。
  3. 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)