【问题标题】:Finding your main window element in Winium.Cruciatus在 Winium.Cruciatus 中找到你的主窗口元素
【发布时间】:2016-03-24 05:12:38
【问题描述】:

我不认为很多人正在使用 Winium.CruciatusWinium.Desktop WebDriver 实现,但如果有人使用,也许你可以帮助或从我的解决方法中受益。

我使用WebDriver 实现来启动我的应用程序,如下所示:

capabilities = { 'app' => path, 'launchDelay' => 1500 }
driver = Selenium::WebDriver.for(:remote,
                                   url: 'http://127.0.0.1:9999',
                                   desired_capabilities: capabilities)

应用程序启动得很好但是我需要找到根元素才能找到子元素,而无需每次都搜索整个自动化树。

我曾经这样做过:

wait.until { @driver.find_element(:id, 'appid') }

如果应用程序已加载并且没有打开太多窗口,则该方法可以正常工作。但是,当我打开 10-15 个窗口并且应用程序需要几秒钟来启动 cruciatus 库时,它就会挂起。我已经将此追溯到自动化库本身,它挂起。我认为这是由于当库仔细阅读元素树时应用程序尚未加载,它开始遍历范围内的每个元素,这需要很长时间,并且最终可能以堆栈溢出结束 (according to MSDN)。

我什至尝试过自己修复 Cruciatus 的实现,但由于这是枚举元素缓慢的固有问题,即使我在 Cruciatus 中设置了超时,它也没有真正的帮助。

我将提供我的解决方法作为答案,但如果有人有更好的建议,将不胜感激?

【问题讨论】:

    标签: c# wpf testing automation webdriver


    【解决方案1】:

    一个简单的解决方法是使用 xpath 来识别应用程序。

    xpath = '/*[@AutomationId=\'yourappid\']'
    wnd_element = wait.until { @driver.find_element(:xpath, xpath) }
    

    这会将搜索限制为桌面的直接子级,并且如果在第一次尝试时未能找到子级,则不会遍历整个树。

    缺点是除非你有一个好的 id,否则可能很难构建 xpath。我创建了一个工具 (Cruciatus.Xml) 来帮助尝试可能有帮助的 xpath。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      • 2013-01-16
      • 1970-01-01
      • 2017-01-30
      • 1970-01-01
      相关资源
      最近更新 更多