diff --git a/tests/wlan/functional/WlanWirelessNetworkManagementTest.py b/tests/wlan/functional/WlanWirelessNetworkManagementTest.py
index eff7bd9..b886ec6 100644
--- a/tests/wlan/functional/WlanWirelessNetworkManagementTest.py
+++ b/tests/wlan/functional/WlanWirelessNetworkManagementTest.py
@@ -47,8 +47,8 @@
     * One Fuchsia device
     * One Whirlwind access point
 
-    Existing Fuchsia drivers do not yet support WNM features out-of-the-box, so these
-    tests check that WNM features are not enabled.
+    Existing Fuchsia drivers do not yet support WNM features out-of-the-box, so this
+    suite skips certain tests depending on whether specific WNM features are enabled.
     """
 
     def setup_class(self):
@@ -63,10 +63,10 @@
             raise signals.TestAbortClass("At least one Fuchsia device is required")
 
         self.fuchsia_device = self.fuchsia_devices[0]
-        if self.fuchsia_device.association_mechanism != "policy":
-            raise AttributeError("Must use WLAN policy layer to test WNM.")
-
         self.dut = create_wlan_device(self.fuchsia_device)
+        if self.fuchsia_device.association_mechanism != "policy":
+            raise AttributeError("Must use WLAN policy layer to test WNM")
+
         self.access_point = self.access_points[0]
 
     def teardown_class(self):
@@ -149,6 +149,11 @@
         asserts.assert_true(self.dut.associate(ssid), "Failed to associate.")
         asserts.assert_true(self.dut.is_connected(), "Failed to connect.")
         client_mac = self._get_client_mac()
+        # Verify that DUT is actually associated (as seen from AP).
+        asserts.assert_true(
+            self.access_point.sta_associated(self.access_point.wlan_2g, client_mac),
+            "DUT is not associated on the 2.4GHz band",
+        )
 
         ext_capabilities = self.access_point.get_sta_extended_capabilities(
             self.access_point.wlan_2g, client_mac
@@ -170,6 +175,11 @@
         asserts.assert_true(self.dut.associate(ssid), "Failed to associate.")
         asserts.assert_true(self.dut.is_connected(), "Failed to connect.")
         client_mac = self._get_client_mac()
+        # Verify that DUT is actually associated (as seen from AP).
+        asserts.assert_true(
+            self.access_point.sta_associated(self.access_point.wlan_2g, client_mac),
+            "DUT is not associated on the 2.4GHz band",
+        )
 
         ext_capabilities = self.access_point.get_sta_extended_capabilities(
             self.access_point.wlan_2g, client_mac
@@ -186,6 +196,11 @@
         asserts.assert_true(self.dut.associate(ssid), "Failed to associate.")
         asserts.assert_true(self.dut.is_connected(), "Failed to connect.")
         client_mac = self._get_client_mac()
+        # Verify that DUT is actually associated (as seen from AP).
+        asserts.assert_true(
+            self.access_point.sta_associated(self.access_point.wlan_2g, client_mac),
+            "DUT is not associated on the 2.4GHz band",
+        )
 
         ext_capabilities = self.access_point.get_sta_extended_capabilities(
             self.access_point.wlan_2g, client_mac
@@ -195,7 +210,7 @@
             "DUT is incorrectly advertising WNM Sleep Mode support",
         )
 
-    def test_roam_on_btm_req(self):
+    def test_roam_on_btm_req_from_open_2g_to_open_5g(self):
         if not self.dut.feature_is_present("BSS_TRANSITION_MANAGEMENT"):
             raise signals.TestSkip("skipping test because BTM feature is not present")
 
@@ -214,8 +229,8 @@
         # Verify that DUT is actually associated (as seen from AP).
         client_mac = self._get_client_mac()
         asserts.assert_true(
-            client_mac in self.access_point.get_stas(self.access_point.wlan_2g),
-            "Client MAC not included in list of associated STAs on the 2.4GHz band",
+            self.access_point.sta_associated(self.access_point.wlan_2g, client_mac),
+            "DUT is not associated on the 2.4GHz band",
         )
 
         # Setup 5 GHz AP with same SSID.
@@ -235,7 +250,7 @@
         neighbor_5g_ap = NeighborReportElement(
             dest_bssid,
             dest_bssid_info,
-            operating_class=126,
+            operating_class=116,
             channel_number=hostapd_constants.AP_DEFAULT_CHANNEL_5G,
             phy_type=PhyType.VHT,
         )
@@ -257,15 +272,19 @@
         # Check that DUT has reassociated.
         REASSOC_DEADLINE = datetime.now(timezone.utc) + timedelta(seconds=2)
         while datetime.now(timezone.utc) < REASSOC_DEADLINE:
-            if client_mac in self.access_point.get_stas(self.access_point.wlan_5g):
+            if self.access_point.sta_associated(self.access_point.wlan_5g, client_mac):
                 break
             else:
                 time.sleep(0.25)
 
         # Verify that DUT roamed (as seen from AP).
         asserts.assert_true(
-            client_mac in self.access_point.get_stas(self.access_point.wlan_5g),
-            "Client MAC not included in list of associated STAs on the 5GHz band",
+            self.access_point.sta_authenticated(self.access_point.wlan_5g, client_mac),
+            "DUT is not authenticated on the 5GHz band",
+        )
+        asserts.assert_true(
+            self.access_point.sta_associated(self.access_point.wlan_5g, client_mac),
+            "DUT is not associated on the 5GHz band",
         )
 
     def test_btm_req_ignored_dut_unsupported(self):
@@ -287,8 +306,8 @@
         # Verify that DUT is actually associated (as seen from AP).
         client_mac = self._get_client_mac()
         asserts.assert_true(
-            client_mac in self.access_point.get_stas(self.access_point.wlan_2g),
-            "Client MAC not included in list of associated STAs on the 2.4GHz band",
+            self.access_point.sta_associated(self.access_point.wlan_2g, client_mac),
+            "DUT is not associated on the 2.4GHz band",
         )
 
         # Setup 5 GHz AP with same SSID.
@@ -325,7 +344,7 @@
         REASSOC_DEADLINE = datetime.now(timezone.utc) + timedelta(seconds=2)
         while datetime.now(timezone.utc) < REASSOC_DEADLINE:
             # Fail if DUT has reassociated to 5 GHz AP (as seen from AP).
-            if client_mac in self.access_point.get_stas(self.access_point.wlan_5g):
+            if self.access_point.sta_associated(self.access_point.wlan_5g, client_mac):
                 raise signals.TestFailure(
                     "DUT unexpectedly roamed to target BSS after BTM request"
                 )
@@ -334,8 +353,8 @@
 
         # DUT should have stayed associated to original AP.
         asserts.assert_true(
-            client_mac in self.access_point.get_stas(self.access_point.wlan_2g),
-            "DUT lost association on the 2.4GHz band after BTM request",
+            self.access_point.sta_associated(self.access_point.wlan_2g, client_mac),
+            "DUT unexpectedly lost association on the 2.4GHz band after BTM request",
         )
 
     def test_btm_req_target_ap_rejects_reassoc(self):
@@ -357,8 +376,8 @@
         # Verify that DUT is actually associated (as seen from AP).
         client_mac = self._get_client_mac()
         asserts.assert_true(
-            client_mac in self.access_point.get_stas(self.access_point.wlan_2g),
-            "Client MAC not included in list of associated STAs on the 2.4GHz band",
+            self.access_point.sta_associated(self.access_point.wlan_2g, client_mac),
+            "DUT is not associated on the 2.4GHz band",
         )
 
         # Setup 5 GHz AP with same SSID, but reject all STAs.
@@ -380,7 +399,7 @@
         neighbor_5g_ap = NeighborReportElement(
             dest_bssid,
             dest_bssid_info,
-            operating_class=126,
+            operating_class=116,
             channel_number=hostapd_constants.AP_DEFAULT_CHANNEL_5G,
             phy_type=PhyType.VHT,
         )
@@ -400,20 +419,12 @@
         # Check that DUT has not reassociated.
         REASSOC_DEADLINE = datetime.now(timezone.utc) + timedelta(seconds=2)
         while datetime.now(timezone.utc) < REASSOC_DEADLINE:
-            # Fail if DUT has reassociated to 5 GHz AP (as seen from AP).
-            if client_mac in self.access_point.get_stas(self.access_point.wlan_5g):
-                raise signals.TestFailure(
-                    "DUT unexpectedly roamed to target BSS after BTM request"
-                )
+            # Check that DUT has not reassociated to 5 GHz AP (as seen from AP).
+            if self.access_point.sta_associated(self.access_point.wlan_5g, client_mac):
+                raise signals.TestFailure("DUT unexpectedly roamed to 5GHz band")
             else:
                 time.sleep(0.25)
 
-        # DUT should have stayed associated to original AP.
-        asserts.assert_true(
-            client_mac in self.access_point.get_stas(self.access_point.wlan_2g),
-            "DUT lost association on the 2.4GHz band after BTM request",
-        )
-
 
 if __name__ == "__main__":
     test_runner.main()
