【问题标题】:How to access menu items?如何访问菜单项?
【发布时间】:2021-06-03 18:33:57
【问题描述】:

我有一个在 Ubuntu 20.04 上运行的功能齐全的 nw.js 应用程序。我可以使用 ruby​​ 的 selenium-webdriver gem 来访问应用程序的 Web 组件(以角度编写)。我可以访问主窗口上的组件,单击按钮等等。效果很好。

require 'selenium'
require 'selenium-webdriver'

但我无法访问 nw.js 菜单。例如,我有一个名为“Info”的 MenuItem,无法从 ruby​​ 脚本中单击它。当我手动单击菜单时,菜单可以正常工作。但是 Selenium ruby​​ 脚本似乎无法访问它。

我尝试添加一个键序列以访问 MenuItem。同样,手动“Alt-I”可以正常工作,但是当我使用时

web.driver.action.key_down(:alt).send_keys('i').perform

它失败了。据我所知,这条线没有效果。

nw.js 文档没有关于此的信息,也没有我能找到的任何示例代码。我尝试了谷歌,再次没有我可以看到的示例代码。

如果你有这个在 ruby​​ 或 python 中工作(我可以翻译它)请发布。

编辑:这是相关的菜单代码:

export class MenuService {
    public menubar: nw.Menu;
    private info_menu: nw.MenuItem
    <snip>

  this.menubar = new window.nw.Menu({
            type: 'menubar'
        });

        // add submenu to the menubar
        this.info_menu = new window.nw.MenuItem({
            label: 'Info',
            tooltip: 'Get info',
            key: 'i',
            modifiers: 'alt',
            click: () => {
                this.show_info()
            }
        })
        this.menubar.append(this.info_menu)

 <snip>
 }

【问题讨论】:

  • 请添加您的代码、html、菜单截图等。

标签: selenium node-webkit


【解决方案1】:

找到了一种,一种解决方案。我不确定这是否是官方使用的 nw.js 方法。

首先运行这个:

  js = %{
     return nw.Window.get().menu;
  }
  puts("jax", JSON.pretty_generate(web.driver.execute_script(js)))

这将转储菜单布局的 JSON 内容。查看“项目”哈希。这是菜单项的数组。找到您想要的菜单项,在我的例子中是“Info”,它是数组中的元素 2。使用以下命令单击该项目:

  js = %{
     return nw.Window.get().menu['items'][2].click();
  }
  puts(JSON.pretty_generate(web.driver.execute_script(js)))

注意:这不是一个完整的答案:

  • 应该适用于嵌套菜单项(例如 File | Quit),但尚未对其进行测试

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    相关资源
    最近更新 更多