title: NVDA does not announce aria-live regions correctly
body: <p>I'm in the process of making a React app as accessible as possible. However, I'm noticing some weird behavior with NVDA - I have two live regions which I just cannot get NVDA to announce correctly. On Voiceover, everything works smoothly with these.</p>
  <p>First there is a notification component, which has generated HTML like this. NVDA doesn't announce the notifications, Voiceover does:</p>
  <pre><code>&lt;div aria-live=&quot;polite&quot; aria-hidden=&quot;true/false&quot;&gt;
    &lt;article&gt; &lt;-- There might be many of these if there's multiple notifications, and there's none of these if there's no notifications
      &lt;div&gt;
        &lt;div type=&quot;alert&quot;&gt;
          &lt;div&gt;
            &lt;div&gt;The text here should be announced when shown&lt;/div&gt;
          &lt;/div&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/article&gt;
  &lt;/div&gt;
  </code></pre>
  <p>If I remove aria-hidden from the first div, NVDA reads it, but it gets unreliable on Voiceover. Inside the first div, there is a PoseGroup component too, just doesn't show up on generated HTML.</p>
  <p>EDIT: I managed to get this working by wrapping the whole thing into yet another div with aria-live=&quot;polite&quot;. A little hacky solution but what you know... If someone has better solution, I'm listening.</p>
  <p>Then there's a live chat, which has HTML like this:</p>
  <pre><code>&lt;div&gt;
    &lt;ul aria-live=&quot;polite&quot;&gt; &lt;-- There are multiple of these depending on number of elements, but always at least one
      &lt;li aria-hidden=&quot;true/false&quot;&gt; &lt;--- There are many of these, some hidden from screen reader depending on the component, these are messages, timestamps etc, some of them should be read
        &lt;div&gt;
          &lt;span&gt;
            &lt;div&gt;
              &lt;p aria-hidden=&quot;true&quot;&gt;Visible message text&lt;/p&gt;
              &lt;p aria-hidden=&quot;false&quot;&gt;Hidden visibility, but contains additional information to screen reader and should be read always&lt;/p&gt;
           &lt;/div&gt;
          &lt;/span&gt;
        &lt;/div&gt;
      &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/div&gt;
  </code></pre>
  <p>Here, I'm using multiple aria-live containers which are spawned when there are enough messages on the former one, this is due to Voiceover stopping the reading when there are too many elements, and this solution works with it. It should be also noted that there is a PoseGroup component wrapping the li elements, it doesn't show on the generated HTML. The li elements should only read the messages, no timestamps etc, that's why they have aria-hidden. No matter what I tried, NVDA doesn't read any of these. Voiceover works perfectly with this kind of code. I have tried to convert the ul and li's to divs with no luck.</p>
  <p>Then there's a form input component, which has an error label as a live region, goes like this:</p>
  <pre><code>&lt;label&gt;
    &lt;span&gt;Some text&lt;/span&gt;
    &lt;input/&gt;
    &lt;div aria-live=&quot;polite&quot;&gt;
      &lt;span&gt;This span is conditionally shown if there's an error.&lt;/span&gt;
    &lt;/div&gt;
  &lt;/label&gt;
  </code></pre>
  <p>This component however, works perfectly like this on both Voiceover and NVDA, and I just cannot get my head around why the other two don't. Sure, they're more complex, but shouldn't it work on NVDA too since Voiceover does it without any difficulty?</p>
  <p>I still consider myself as an accessibility noob, and been banging my head against a wall for couple of days.</p>