From 2bd9d01ae4c02cfaad2b3d910f7afd484faf3458 Mon Sep 17 00:00:00 2001 From: Martin Pitt Date: Thu, 25 May 2023 06:53:36 +0200 Subject: [PATCH 1/2] Update default $TEST_OS to fedora-38 See https://github.com/cockpit-project/bots/pull/4775 --- HACKING.md | 2 +- Makefile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) Index: cockpit-machines-292/HACKING.md =================================================================== --- cockpit-machines-292.orig/HACKING.md +++ cockpit-machines-292/HACKING.md @@ -79,7 +79,7 @@ css or other issues: # Running tests locally Run `make vm` to build an RPM and install it into a standard Cockpit test VM. -This will be `fedora-37` by default. You can set `$TEST_OS` to use a different +This will be `fedora-38` by default. You can set `$TEST_OS` to use a different image, for example TEST_OS=centos-8-stream make vm Index: cockpit-machines-292/Makefile =================================================================== --- cockpit-machines-292.orig/Makefile +++ cockpit-machines-292/Makefile @@ -3,7 +3,7 @@ PACKAGE_NAME := $(shell awk '/"name":/ { RPM_NAME := cockpit-$(PACKAGE_NAME) VERSION := $(shell T=$$(git describe 2>/dev/null) || T=1; echo $$T | tr '-' '.') ifeq ($(TEST_OS),) -TEST_OS = fedora-37 +TEST_OS = fedora-38 endif export TEST_OS TARFILE=$(RPM_NAME)-$(VERSION).tar.xz @@ -41,7 +41,7 @@ COCKPIT_REPO_FILES = \ $(NULL) COCKPIT_REPO_URL = https://github.com/cockpit-project/cockpit.git -COCKPIT_REPO_COMMIT = 355c0aa59e3991243e10a61183e62ea129d3261a # 292 + 8 commits +COCKPIT_REPO_COMMIT = 3ca979d542a4d6cf865f2132e0bdf1b06c49d07f # 292 + 56 commits $(COCKPIT_REPO_FILES): $(COCKPIT_REPO_STAMP) COCKPIT_REPO_TREE = '$(strip $(COCKPIT_REPO_COMMIT))^{tree}' Index: cockpit-machines-292/package.json =================================================================== --- cockpit-machines-292.orig/package.json +++ cockpit-machines-292/package.json @@ -45,12 +45,13 @@ "stylelint-formatter-pretty": "^3.1.1" }, "dependencies": { - "@patternfly/patternfly": "5.0.0-alpha.43", - "@patternfly/react-console": "^5.0.0-alpha.1", - "@patternfly/react-core": "5.0.0-alpha.83", - "@patternfly/react-icons": "5.0.0-alpha.12", - "@patternfly/react-styles": "5.0.0-alpha.8", - "@patternfly/react-table": "5.0.0-alpha.85", + "@patternfly/patternfly": "5.0.0-alpha.53", + "@patternfly/react-console": "5.0.0-alpha.1", + "@patternfly/react-core": "5.0.0-alpha.98", + "@patternfly/react-icons": "5.0.0-alpha.14", + "@patternfly/react-styles": "5.0.0-alpha.10", + "@patternfly/react-table": "5.0.0-alpha.100", + "@patternfly/react-tokens": "5.0.0-alpha.9", "date-fns": "2.28.0", "deep-equal": "2.0.5", "prop-types": "15.8.1", Index: cockpit-machines-292/src/components/common/machinesConnectionSelector.jsx =================================================================== --- cockpit-machines-292.orig/src/components/common/machinesConnectionSelector.jsx +++ cockpit-machines-292/src/components/common/machinesConnectionSelector.jsx @@ -79,7 +79,7 @@ export const MachinesConnectionSelector } > - Index: cockpit-machines-292/src/components/common/needsShutdown.scss =================================================================== --- cockpit-machines-292.orig/src/components/common/needsShutdown.scss +++ cockpit-machines-292/src/components/common/needsShutdown.scss @@ -1,3 +1,3 @@ .configuration-changes-list { - margin-top: var(--pf-c-list--li--MarginTop); + margin-top: var(--pf-v5-c-list--li--MarginTop); } Index: cockpit-machines-292/src/components/common/overviewCard.css =================================================================== --- cockpit-machines-292.orig/src/components/common/overviewCard.css +++ cockpit-machines-292/src/components/common/overviewCard.css @@ -3,6 +3,6 @@ } .overview-icon svg { - color: var(--pf-c-description-list__term-icon--Color); - font-size: var(--pf-c-description-list__term--FontSize); + color: var(--pf-v5-c-description-list__term-icon--Color); + font-size: var(--pf-v5-c-description-list__term--FontSize); } Index: cockpit-machines-292/src/components/common/stateIcon.scss =================================================================== --- cockpit-machines-292.orig/src/components/common/stateIcon.scss +++ cockpit-machines-292/src/components/common/stateIcon.scss @@ -1,20 +1,20 @@ .resource-state-text { - margin-right: var(--pf-c-label--PaddingRight); + margin-right: var(--pf-v5-c-label--PaddingRight); // In definition lists (for Overview), // match text size and alignment - .pf-c-table &, - .pf-c-description-list & { + .pf-v5-c-table &, + .pf-v5-c-description-list & { // Match text size font-size: inherit; // Compensate for padding position: relative; // Using margin to remove the extra padded space, // instead of keeping the space and moving contents w/ just left/top - margin-left: calc(-1 * var(--pf-c-label--PaddingLeft)); + margin-left: calc(-1 * var(--pf-v5-c-label--PaddingLeft)); } } -.pf-c-label.resource-state--shut-off, .pf-c-label.resource-state--inactive { +.pf-v5-c-label.resource-state--shut-off, .pf-v5-c-label.resource-state--inactive { background: transparent; } Index: cockpit-machines-292/src/components/create-vm-dialog/createVmDialog.jsx =================================================================== --- cockpit-machines-292.orig/src/components/create-vm-dialog/createVmDialog.jsx +++ cockpit-machines-292/src/components/create-vm-dialog/createVmDialog.jsx @@ -507,7 +507,7 @@ const HelperMessageToken = ({ message }) ); return ( - + {message && {message + " "}} { link } @@ -524,7 +524,7 @@ const validationStates = { }, INPROGRESS: { option: "default", - message: {_("Checking token validity...")}, + message: {_("Checking token validity...")}, }, FAILED: { option: "error", @@ -1326,13 +1326,13 @@ class CreateVmModal extends React.Compon validationFailed={validationFailed} /> { this.props.mode === "create" ? - {_("Details")}} id="details-tab" className="pf-c-form"> + {_("Details")}} id="details-tab" className="pf-v5-c-form"> {detailsTab} {_("Automation")}} id="automation" - className="pf-c-form" + className="pf-v5-c-form" tooltip={automationTabTooltip} isAriaDisabled={!!automationTabTooltip}> {automationTab} Index: cockpit-machines-292/src/components/create-vm-dialog/createVmDialog.scss =================================================================== --- cockpit-machines-292.orig/src/components/create-vm-dialog/createVmDialog.scss +++ cockpit-machines-292/src/components/create-vm-dialog/createVmDialog.scss @@ -2,12 +2,12 @@ max-width: 5rem; } -.pf-c-tooltip__arrow { +.pf-v5-c-tooltip__arrow { margin-right: var(--pf-global--spacer--xl); } .invalid-token-helper { - color: var(--pf-c-form__helper-text--m-error--Color); + color: var(--pf-v5-c-form__helper-text--m-error--Color); } // Move position of icon so it doens't get covered by scrollbar. Index: cockpit-machines-292/src/components/storagePools/storagePoolDelete.scss =================================================================== --- cockpit-machines-292.orig/src/components/storagePools/storagePoolDelete.scss +++ cockpit-machines-292/src/components/storagePools/storagePoolDelete.scss @@ -1,4 +1,4 @@ .pool-volumes-delete-list { margin-top: var(--pf-global--spacer--sm); - --pf-c-list--li--MarginTop: 0 !important; + --pf-v5-c-list--li--MarginTop: 0 !important; } Index: cockpit-machines-292/src/components/storagePools/storagePoolList.scss =================================================================== --- cockpit-machines-292.orig/src/components/storagePools/storagePoolList.scss +++ cockpit-machines-292/src/components/storagePools/storagePoolList.scss @@ -1,11 +1,11 @@ #storage-pools-listing { - .pf-c-table tbody > tr > * { + .pf-v5-c-table tbody > tr > * { // These tables are 1 row tall; progress bar does odd stuff for alignment; // vertical alignment makes text line up vertical-align: middle; } - .pf-c-table__toggle > .pf-c-button { + .pf-v5-c-table__toggle > .pf-v5-c-button { // Undo the PF alignment offset, as we're aligning to the middle (see above) margin-top: 0; } @@ -17,11 +17,11 @@ --progress-bar-max: 12vw; td[data-label="Size"] { - > .pf-c-progress { + > .pf-v5-c-progress { // Fix progress bar size grid-template-columns: minmax(var(--progress-bar-min), var(--progress-bar-max)) minmax(max-content, var(--progress-text)); - > .pf-c-progress__status { + > .pf-v5-c-progress__status { // Align status text to the end (for GiB to align properly) justify-self: end; } Index: cockpit-machines-292/src/components/storagePools/storagePoolVolumesTab.css =================================================================== --- cockpit-machines-292.orig/src/components/storagePools/storagePoolVolumesTab.css +++ cockpit-machines-292/src/components/storagePools/storagePoolVolumesTab.css @@ -1,3 +1,3 @@ -.pf-c-empty-state__content button:not(:first-child) { +.pf-v5-c-empty-state__content button:not(:first-child) { margin-left: 0.3em; } Index: cockpit-machines-292/src/components/vm/consoles/consoles.css =================================================================== --- cockpit-machines-292.orig/src/components/vm/consoles/consoles.css +++ cockpit-machines-292/src/components/vm/consoles/consoles.css @@ -1,30 +1,30 @@ @import "@patternfly/react-styles/css/components/Consoles/SerialConsole.css"; -.pf-c-console, -.pf-c-console__vnc, -.pf-c-console__vnc > div, -.pf-c-console__vnc > div > div { +.pf-v5-c-console, +.pf-v5-c-console__vnc, +.pf-v5-c-console__vnc > div, +.pf-v5-c-console__vnc > div > div { width: 100%; height: 100%; } -.pf-c-console__actions { +.pf-v5-c-console__actions { max-width: 25ch; } -.pf-c-console { +.pf-v5-c-console { /* auto minimum width, causing problem */ grid-template-columns: 1fr; grid-template-rows: min-content 1fr; } -.consoles-page-expanded .actions-pagesection .pf-c-page__main-body { +.consoles-page-expanded .actions-pagesection .pf-v5-c-page__main-body { padding-bottom: 0; } /* Hide send key button - there is not way to do that from the JS * https://github.com/patternfly/patternfly-react/issues/3689 */ -#pf-c-console__send-shortcut { +#pf-v5-c-console__send-shortcut { display: none; } Index: cockpit-machines-292/src/components/vm/consoles/serialConsole.jsx =================================================================== --- cockpit-machines-292.orig/src/components/vm/consoles/serialConsole.jsx +++ cockpit-machines-292/src/components/vm/consoles/serialConsole.jsx @@ -89,13 +89,13 @@ class SerialConsoleCockpit extends React return ( <> -
+
{this.state.channel ? : }
-
+
{t}
Index: cockpit-machines-292/src/components/vm/disks/diskEdit.jsx =================================================================== --- cockpit-machines-292.orig/src/components/vm/disks/diskEdit.jsx +++ cockpit-machines-292/src/components/vm/disks/diskEdit.jsx @@ -60,7 +60,7 @@ const CacheRow = ({ onValueChanged, dial label={_("Cache")} labelIcon={!shutoff && - }> @@ -90,7 +90,7 @@ const BusRow = ({ onValueChanged, dialog - }> Index: cockpit-machines-292/src/components/vm/filesystems/vmFilesystemsCard.jsx =================================================================== --- cockpit-machines-292.orig/src/components/vm/filesystems/vmFilesystemsCard.jsx +++ cockpit-machines-292/src/components/vm/filesystems/vmFilesystemsCard.jsx @@ -205,7 +205,7 @@ const VmFilesystemAddModal = ({ connecti labelIcon={ Index: cockpit-machines-292/src/components/vm/overview/bootOrder.css =================================================================== --- cockpit-machines-292.orig/src/components/vm/overview/bootOrder.css +++ cockpit-machines-292/src/components/vm/overview/bootOrder.css @@ -14,7 +14,7 @@ /* Patternfly horizontal lists should convert to vertical in small screens https://github.com/patternfly/patternfly/issues/3630 */ @media (max-width: 640px) { - .boot-order-additional-info .pf-c-description-list { - --pf-c-description-list__group--GridTemplateColumns: var(--pf-c-description-list--m-vertical__group--GridTemplateColumns); + .boot-order-additional-info .pf-v5-c-description-list { + --pf-v5-c-description-list__group--GridTemplateColumns: var(--pf-v5-c-description-list--m-vertical__group--GridTemplateColumns); } } Index: cockpit-machines-292/src/components/vm/overview/cpuModal.jsx =================================================================== --- cockpit-machines-292.orig/src/components/vm/overview/cpuModal.jsx +++ cockpit-machines-292/src/components/vm/overview/cpuModal.jsx @@ -229,7 +229,7 @@ export const CPUModal = ({ vm, maxVcpu, - }> @@ -250,7 +250,7 @@ export const CPUModal = ({ vm, maxVcpu, - }> @@ -271,7 +271,7 @@ export const CPUModal = ({ vm, maxVcpu, - }> Index: cockpit-machines-292/src/components/vm/overview/memorySelectRow.css =================================================================== --- cockpit-machines-292.orig/src/components/vm/overview/memorySelectRow.css +++ cockpit-machines-292/src/components/vm/overview/memorySelectRow.css @@ -1,3 +1,3 @@ -.memory-slider .pf-c-slider__step-label { +.memory-slider .pf-v5-c-slider__step-label { min-width: 5ch; } Index: cockpit-machines-292/src/components/vm/overview/vmOverviewCard.jsx =================================================================== --- cockpit-machines-292.orig/src/components/vm/overview/vmOverviewCard.jsx +++ cockpit-machines-292/src/components/vm/overview/vmOverviewCard.jsx @@ -212,7 +212,7 @@ class VmOverviewCard extends React.Compo - @@ -102,7 +102,7 @@ const StorageRow = ({ storage, setStorag

{_("Full disk images and the domain's memory will be migrated. Only non-shared, writable disk images will be transferred. Unused storage will remain on the origin after migration.")}

}> - Index: cockpit-machines-292/src/components/vms/hostvmslist.scss =================================================================== --- cockpit-machines-292.orig/src/components/vms/hostvmslist.scss +++ cockpit-machines-292/src/components/vms/hostvmslist.scss @@ -2,14 +2,14 @@ @import "@patternfly/patternfly/base/patternfly-variables.scss"; /* Style the list cards as ct-cards */ -.pf-c-page__main-section .pf-c-card { +.pf-v5-c-page__main-section .pf-v5-c-card { @extend .ct-card; } // PF4 issue https://github.com/patternfly/patternfly-react/issues/4612 -// Mimic .pf-c-table__action +// Mimic .pf-v5-c-table__action #virtual-machines-listing td:last-child { - --pf-c-table--cell--Width: 1%; + --pf-v5-c-table--cell--Width: 1%; } // Expand the link to the container, for easier clickability @@ -21,6 +21,6 @@ /* Add the missing space when the list's toolbar wraps * patternfly/patternfly#3348 */ -.pf-c-toolbar__content-section { +.pf-v5-c-toolbar__content-section { gap: var(--pf-global--spacer--sm) 0; } Index: cockpit-machines-292/src/machines.scss =================================================================== --- cockpit-machines-292.orig/src/machines.scss +++ cockpit-machines-292/src/machines.scss @@ -7,31 +7,33 @@ @import "@patternfly/patternfly/sass-utilities/colors.scss"; @import "@patternfly/patternfly/sass-utilities/scss-variables.scss"; @import "@patternfly/patternfly/sass-utilities/mixins.scss"; + // for $alert +@import "@patternfly/patternfly/sass-utilities/component-namespaces.scss"; @import "@patternfly/patternfly/components/Alert/alert.scss"; /* Utilities */ @import "@patternfly/patternfly/utilities/Text/text.css"; /* Style the list cards as ct-cards */ -.pf-c-page__main-section > .pf-c-card { +.pf-v5-c-page__main-section > .pf-v5-c-card { @extend .ct-card; } -.pf-c-form__group .pf-c-helper-text { - margin-top: var(--pf-c-form__helper-text--MarginTop); +.pf-v5-c-form__group .pf-v5-c-helper-text { + margin-top: var(--pf-v5-c-form__helper-text--MarginTop); } /* Create a hybrid popover with an alert style */ -.ct-popover-alert .pf-c-popover__content { - @extend .pf-c-alert; +.ct-popover-alert .pf-v5-c-popover__content { + @extend .pf-v5-c-alert; @extend .pf-m-danger; display: block; box-shadow: none; } /* Also style the hybrid popover alert title like an alert */ -.ct-popover-alert .pf-c-title { - @extend .pf-c-alert__title; +.ct-popover-alert .pf-v5-c-title { + @extend .pf-v5-c-alert__title; font-size: inherit; } @@ -56,27 +58,27 @@ margin: 0.25rem 0 0.25rem 0.5rem; } -.machines-listing-actions > .pf-c-dropdown { +.machines-listing-actions > .pf-v5-c-dropdown { margin-top: 0.25rem; } -.pf-c-dropdown__menu-item.pf-m-danger { +.pf-v5-c-dropdown__menu-item.pf-m-danger { color: var(--pf-global--danger-color--200); } -.pf-c-table { +.pf-v5-c-table { .btn-group { align-items: center; } - > tbody > tr:not(.pf-c-table__expandable-row) > [data-label="Actions"] .pf-c-button { + > tbody > tr:not(.pf-v5-c-table__expandable-row) > [data-label="Actions"] .pf-v5-c-button { // vertical: compensate for padding; fixing alignment // horizontal: add some needed padding margin: -0.25rem 0.25rem; } } -.machines-connection-selector > .pf-c-radio:first-child { +.machines-connection-selector > .pf-v5-c-radio:first-child { padding-right: var(--pf-global--spacer--md); } @@ -85,7 +87,7 @@ max-width: 5rem; } -.ct-external-docs-link.pf-c-button.pf-m-link.pf-m-inline { +.ct-external-docs-link.pf-v5-c-button.pf-m-link.pf-m-inline { padding-left: var(--pf-global--spacer--sm); } @@ -94,19 +96,19 @@ } // Do not add a box-shadow to a "subsection", while it's technically correct it looks weird. -.pf-c-page__main-section.pf-m-light.actions-pagesection { +.pf-v5-c-page__main-section.pf-m-light.actions-pagesection { box-shadow: none; } .virtualization-disabled-empty-state { // Use a max width of 60 0-characters across and let it size for mobile too - --pf-c-empty-state__content--MaxWidth: min(60ch, 100%); + --pf-v5-c-empty-state__content--MaxWidth: min(60ch, 100%); } // Can be removed once https://github.com/cockpit-project/cockpit/pull/18694 is included in the used pkg/lib .pf-theme-dark { - .pf-c-page__main-group section { - --pf-c-page__main-breadcrumb--BackgroundColor: var(--pf-global--BackgroundColor--dark-100); + .pf-v5-c-page__main-group section { + --pf-v5-c-page__main-breadcrumb--BackgroundColor: var(--pf-global--BackgroundColor--dark-100); background-color: var(--pf-global--BackgroundColor--dark-100); } } Index: cockpit-machines-292/test/check-machines-consoles =================================================================== --- cockpit-machines-292.orig/test/check-machines-consoles +++ cockpit-machines-292/test/check-machines-consoles @@ -47,10 +47,10 @@ class TestMachinesConsoles(VirtualMachin self.goToVmPage("subVmTest1") # since VNC is not defined for this VM, the view for "Desktop Viewer" is rendered by default - b.wait_in_text(".pf-c-console__manual-connection dl > div:first-child dd", "127.0.0.1") - b.wait_in_text(".pf-c-console__manual-connection dl > div:nth-child(2) dd", "5900") + b.wait_in_text(".pf-v5-c-console__manual-connection dl > div:first-child dd", "127.0.0.1") + b.wait_in_text(".pf-v5-c-console__manual-connection dl > div:nth-child(2) dd", "5900") - b.click(".pf-c-console__remote-viewer-launch-vv") # "Launch Remote Viewer" button + b.click(".pf-v5-c-console__remote-viewer-launch-vv") # "Launch Remote Viewer" button b.wait_visible("#dynamically-generated-file") # is .vv file generated for download? self.assertEqual(b.attr("#dynamically-generated-file", "href"), u"data:application/x-virt-viewer,%5Bvirt-viewer%5D%0Atype%3Dspice%0Ahost%3D127.0.0.1%0Aport%3D5900%0Adelete-this-file%3D1%0Afullscreen%3D0%0A") @@ -63,8 +63,8 @@ class TestMachinesConsoles(VirtualMachin b.click("button:contains(Expand)") # Check "More information" - b.click('.pf-c-console__remote-viewer .pf-c-expandable-section__toggle') - b.wait_in_text('.pf-c-expandable-section__content', + b.click('.pf-v5-c-console__remote-viewer .pf-v5-c-expandable-section__toggle') + b.wait_in_text('.pf-v5-c-expandable-section__content', 'Clicking "Launch remote viewer" will download') b.assert_pixels("#vm-subVmTest1-consoles-page", "vm-details-console-external", skip_layouts=["rtl"]) @@ -85,7 +85,7 @@ class TestMachinesConsoles(VirtualMachin self.goToVmPage("subVmTest1") # since VNC is defined for this VM, the view for "In-Browser Viewer" is rendered by default - b.wait_visible(".pf-c-console__vnc canvas") + b.wait_visible(".pf-v5-c-console__vnc canvas") # make sure the log file is full - then empty it and reboot the VM - the log file should fill up again self.waitCirrOSBooted(args['logfile']) @@ -112,10 +112,10 @@ class TestMachinesConsoles(VirtualMachin self.goToVmPage(name) b.wait_in_text(f"#vm-{name}-system-state", "Running") - b.click("#pf-c-console__type-selector") - b.wait_visible("#pf-c-console__type-selector + .pf-c-select__menu") + b.click("#pf-v5-c-console__type-selector") + b.wait_visible("#pf-v5-c-console__type-selector + .pf-v5-c-select__menu") b.click("#SerialConsole button") - b.wait_not_present("#pf-c-console__type-selector + .pf-c-select__menu") + b.wait_not_present("#pf-v5-c-console__type-selector + .pf-v5-c-select__menu") b.wait_in_text(f"#{name}-terminal .xterm-accessibility-tree", f"Connected to domain '{name}'") @@ -138,15 +138,15 @@ class TestMachinesConsoles(VirtualMachin b.click("button:contains(Expand)") b.assert_pixels("#vm-vmWithSerialConsole-consoles-page", "vm-details-console-serial", - ignore=[".pf-c-console__vnc"], skip_layouts=["rtl"]) + ignore=[".pf-v5-c-console__vnc"], skip_layouts=["rtl"]) # Add a second serial console m.execute("virsh destroy vmWithSerialConsole; virt-xml --add-device vmWithSerialConsole --console pty,target_type=virtio; virsh start vmWithSerialConsole") - b.click("#pf-c-console__type-selector") - b.wait_visible("#pf-c-console__type-selector + .pf-c-select__menu") + b.click("#pf-v5-c-console__type-selector") + b.wait_visible("#pf-v5-c-console__type-selector + .pf-v5-c-select__menu") b.click("li:contains('Serial console (console0)') button") b.wait(lambda: m.execute("ps aux | grep 'virsh -c qemu:///system console vmWithSerialConsole console0'")) - b.click("#pf-c-console__type-selector") + b.click("#pf-v5-c-console__type-selector") b.click("li:contains('Serial console (console1)') button") b.wait(lambda: m.execute("ps aux | grep 'virsh -c qemu:///system console vmWithSerialConsole console1'")) @@ -160,8 +160,8 @@ class TestMachinesConsoles(VirtualMachin m.execute("virsh start vmWithSerialConsole") for i in range(0, 6): - b.click("#pf-c-console__type-selector") - b.wait_visible("#pf-c-console__type-selector + .pf-c-select__menu") + b.click("#pf-v5-c-console__type-selector") + b.wait_visible("#pf-v5-c-console__type-selector + .pf-v5-c-select__menu") b.click(f'li:contains(\'Serial console ({"serial" if i == 0 else "console"}{i})\') button') b.wait(lambda: m.execute(f'ps aux | grep \'virsh -c qemu:///system console vmWithSerialConsole {"serial" if i == 0 else "console"}{i}\'')) @@ -187,22 +187,22 @@ class TestMachinesConsoles(VirtualMachin # test switching console from serial to graphical b.wait_visible(f"#vm-{name}-consoles") - b.wait_visible(".pf-c-console__vnc canvas") + b.wait_visible(".pf-v5-c-console__vnc canvas") - b.click("#pf-c-console__type-selector") - b.wait_visible("#pf-c-console__type-selector + .pf-c-select__menu") + b.click("#pf-v5-c-console__type-selector") + b.wait_visible("#pf-v5-c-console__type-selector + .pf-v5-c-select__menu") b.click("#SerialConsole button") - b.wait_not_present("#pf-c-console__type-selector + .pf-c-select__menu") + b.wait_not_present("#pf-v5-c-console__type-selector + .pf-v5-c-select__menu") - b.wait_not_present(".pf-c-console__vnc canvas") + b.wait_not_present(".pf-v5-c-console__vnc canvas") b.wait_visible(f"#{name}-terminal") # Go back to Vnc console - b.click("#pf-c-console__type-selector") - b.wait_visible("#pf-c-console__type-selector + .pf-c-select__menu") + b.click("#pf-v5-c-console__type-selector") + b.wait_visible("#pf-v5-c-console__type-selector + .pf-v5-c-select__menu") b.click("#VncConsole button") - b.wait_not_present("#pf-c-console__type-selector + .pf-c-select__menu") - b.wait_visible(".pf-c-console__vnc canvas") + b.wait_not_present("#pf-v5-c-console__type-selector + .pf-v5-c-select__menu") + b.wait_visible(".pf-v5-c-console__vnc canvas") # Go to the expanded console view b.click("button:contains(Expand)") Index: cockpit-machines-292/test/check-machines-create =================================================================== --- cockpit-machines-292.orig/test/check-machines-create +++ cockpit-machines-292/test/check-machines-create @@ -870,9 +870,9 @@ vnc_password= "{vnc_passwd}" b.wait_visible("#create-vm-dialog") if self.sourceType == 'disk_image': - b.wait_in_text(".pf-c-modal-box .pf-c-modal-box__header .pf-c-modal-box__title", "Import a virtual machine") + b.wait_in_text(".pf-v5-c-modal-box .pf-v5-c-modal-box__header .pf-v5-c-modal-box__title", "Import a virtual machine") else: - b.wait_in_text(".pf-c-modal-box .pf-c-modal-box__header .pf-c-modal-box__title", "Create new virtual machine") + b.wait_in_text(".pf-v5-c-modal-box .pf-v5-c-modal-box__header .pf-v5-c-modal-box__title", "Create new virtual machine") if self.os_name is not None: # remove os codename from os name, e.g.: 'bullseye' in 'Debian 11 (bullseye)' @@ -1028,7 +1028,7 @@ vnc_password= "{vnc_passwd}" def checkOsSorted(self, sorted_list): b = self.browser - b.click("#os-select-group .pf-c-select .pf-c-button") + b.click("#os-select-group .pf-v5-c-select .pf-v5-c-button") # Find the first OS from the sorted list, and get a text of it's next neighbour next_os = b.text(f"#os-select-group li:contains({sorted_list[0]}) + li") @@ -1044,9 +1044,9 @@ vnc_password= "{vnc_passwd}" def createAndVerifyVirtInstallArgsCloudInit(self): if self.create_and_run: - self.browser.click(".pf-c-modal-box__footer button:contains(Create and run)") + self.browser.click(".pf-v5-c-modal-box__footer button:contains(Create and run)") else: - self.browser.click(".pf-c-modal-box__footer button:contains(Create and edit)") + self.browser.click(".pf-v5-c-modal-box__footer button:contains(Create and edit)") self.browser.wait_not_present("#create-vm-dialog") if self.create_and_run: @@ -1096,9 +1096,9 @@ vnc_password= "{vnc_passwd}" m = self.machine if self.create_and_run: - self.browser.click(".pf-c-modal-box__footer button:contains(Create and run)") + self.browser.click(".pf-v5-c-modal-box__footer button:contains(Create and run)") else: - self.browser.click(".pf-c-modal-box__footer button:contains(Create and edit)") + self.browser.click(".pf-v5-c-modal-box__footer button:contains(Create and edit)") self.browser.wait_not_present("#create-vm-dialog") self.browser.wait_text(f"#vm-{self.name}-{self.connection}-state", "Shut off") @@ -1119,9 +1119,9 @@ vnc_password= "{vnc_passwd}" def createAndVerifyVirtInstallArgsUnattended(self): if self.create_and_run: - self.browser.click(".pf-c-modal-box__footer button:contains(Create and run)") + self.browser.click(".pf-v5-c-modal-box__footer button:contains(Create and run)") else: - self.browser.click(".pf-c-modal-box__footer button:contains(Create and edit)") + self.browser.click(".pf-v5-c-modal-box__footer button:contains(Create and edit)") self.browser.wait_not_present("#create-vm-dialog") if self.storage_pool != NO_STORAGE: self.goToVmPage(self.name) @@ -1245,7 +1245,7 @@ vnc_password= "{vnc_passwd}" def cancel(self, force=False): b = self.browser if b.is_present("#create-vm-dialog"): - b.click(".pf-c-modal-box__footer button:contains(Cancel)") + b.click(".pf-v5-c-modal-box__footer button:contains(Cancel)") b.wait_not_present("#create-vm-dialog") elif force: raise Exception("There is no dialog to cancel") @@ -1257,31 +1257,31 @@ vnc_password= "{vnc_passwd}" if create: if self.sourceType == 'disk_image': if self.create_and_run: - b.click(".pf-c-modal-box__footer button:contains(Import and run)") + b.click(".pf-v5-c-modal-box__footer button:contains(Import and run)") else: - b.click(".pf-c-modal-box__footer button:contains(Import and edit)") + b.click(".pf-v5-c-modal-box__footer button:contains(Import and edit)") else: if self.create_and_run: - b.click(".pf-c-modal-box__footer button:contains(Create and run)") + b.click(".pf-v5-c-modal-box__footer button:contains(Create and run)") else: - b.click(".pf-c-modal-box__footer button:contains(Create and edit)") + b.click(".pf-v5-c-modal-box__footer button:contains(Create and edit)") for error, error_msg in errors.items(): if is_warning: - error_location = f".pf-c-modal-box__body #{error}-group .pf-c-form__helper-text .pf-m-warning" + error_location = f".pf-v5-c-modal-box__body #{error}-group .pf-v5-c-form__helper-text .pf-m-warning" else: - error_location = f".pf-c-modal-box__body #{error}-group .pf-c-form__helper-text .pf-m-error" + error_location = f".pf-v5-c-modal-box__body #{error}-group .pf-v5-c-form__helper-text .pf-m-error" b.wait_visible(error_location) if (error_msg): b.wait_in_text(error_location, error_msg) if create: if self.sourceType == 'disk_image': - b.wait_visible(".pf-c-modal-box__footer button:contains(Import and run)[aria-disabled=true]") - b.wait_visible(".pf-c-modal-box__footer button:contains(Import and edit)[aria-disabled=true]") + b.wait_visible(".pf-v5-c-modal-box__footer button:contains(Import and run)[aria-disabled=true]") + b.wait_visible(".pf-v5-c-modal-box__footer button:contains(Import and edit)[aria-disabled=true]") else: - b.wait_visible(".pf-c-modal-box__footer button:contains(Create and run)[aria-disabled=true]") - b.wait_visible(".pf-c-modal-box__footer button:contains(Create and edit)[aria-disabled=true]") + b.wait_visible(".pf-v5-c-modal-box__footer button:contains(Create and run)[aria-disabled=true]") + b.wait_visible(".pf-v5-c-modal-box__footer button:contains(Create and edit)[aria-disabled=true]") return self @@ -1299,11 +1299,11 @@ vnc_password= "{vnc_passwd}" ', '.join(errors), b.text(error_location))) if self.create_and_run: - b.click(".pf-c-modal-box__footer button:contains(Create and run)") + b.click(".pf-v5-c-modal-box__footer button:contains(Create and run)") else: - b.click(".pf-c-modal-box__footer button:contains(Create and edit)") + b.click(".pf-v5-c-modal-box__footer button:contains(Create and edit)") - error_location = ".pf-c-modal-box__footer div.pf-c-alert" + error_location = ".pf-v5-c-modal-box__footer div.pf-v5-c-alert" try: with b.wait_timeout(10): @@ -1318,7 +1318,7 @@ vnc_password= "{vnc_passwd}" raise else: # then error should be shown in the notification area - error_location = ".pf-c-alert-group li .pf-c-alert" + error_location = ".pf-v5-c-alert-group li .pf-v5-c-alert" with b.wait_timeout(20): b.wait_visible(error_location) b.wait_in_text("button.alert-link.more-button", "show more") @@ -1326,8 +1326,8 @@ vnc_password= "{vnc_passwd}" waitForError(errors, error_location) # Close the notification - b.click(".pf-c-alert-group li .pf-c-alert button.pf-m-plain") - b.wait_not_present(".pf-c-alert-group li .pf-c-alert") + b.click(".pf-v5-c-alert-group li .pf-v5-c-alert button.pf-m-plain") + b.wait_not_present(".pf-v5-c-alert-group li .pf-v5-c-alert") return self @@ -1486,14 +1486,14 @@ vnc_password= "{vnc_passwd}" b = self.browser if dialog.sourceType == 'disk_image': if dialog.create_and_run: - b.click(".pf-c-modal-box__footer button:contains(Import and run)") + b.click(".pf-v5-c-modal-box__footer button:contains(Import and run)") else: - b.click(".pf-c-modal-box__footer button:contains(Import and edit)") + b.click(".pf-v5-c-modal-box__footer button:contains(Import and edit)") else: if dialog.create_and_run: - b.click(".pf-c-modal-box__footer button:contains(Create and run)") + b.click(".pf-v5-c-modal-box__footer button:contains(Create and run)") else: - b.click(".pf-c-modal-box__footer button:contains(Create and edit)") + b.click(".pf-v5-c-modal-box__footer button:contains(Create and edit)") final_state = "Running" if dialog.create_and_run else "Shut off" # Test dowloading RHEL image shows the progress of the download @@ -1504,9 +1504,9 @@ vnc_password= "{vnc_passwd}" # Progress is shown in VM state in VMs list self.assertRegex(b.text(f"#vm-{dialog.name}-{dialog.connection}-state"), r"^.*[0-9][0-9]?%$|^100%$") else: - b.wait_in_text(".pf-c-empty-state__content", "Downloading image") + b.wait_in_text(".pf-v5-c-empty-state__content", "Downloading image") # Progress is shown at VM page empty state - self.assertRegex(b.text(".pf-c-empty-state__body .pf-c-progress__status"), r"^[0-9][0-9]?%$|^100%$") + self.assertRegex(b.text(".pf-v5-c-empty-state__body .pf-v5-c-progress__status"), r"^[0-9][0-9]?%$|^100%$") b.wait_in_text(f"#vm-{dialog.name}-{dialog.connection}-state", final_state) b.wait_not_present("#create-vm-dialog") @@ -1559,7 +1559,7 @@ vnc_password= "{vnc_passwd}" m.execute("virsh net-destroy default") b.wait_in_text(f"#vm-{name}-{connection}-state", "Shut off") b.wait_visible(f"#vm-{name}-{connection}-install") - b.wait_in_text(".pf-c-alert", "failed to get installed") + b.wait_in_text(".pf-v5-c-alert", "failed to get installed") # can reattempt installation b.wait_visible(f"#vm-{name}-{connection}-install") # can't run, as it is still in install phase @@ -1620,7 +1620,7 @@ vnc_password= "{vnc_passwd}" memory_text = "/ " + f"{dialog.memory_size / 1024:.1f}".rstrip('.0') + " GiB" else: memory_text = "/ " + f"{dialog.memory_size:.1f}".rstrip('.0') + f" {dialog.memory_size_unit}" - b.wait_in_text(".memory-usage-chart .pf-c-progress__status > .pf-c-progress__measure", memory_text) + b.wait_in_text(".memory-usage-chart .pf-v5-c-progress__status > .pf-v5-c-progress__measure", memory_text) # check disks # Test disk got imported/created @@ -1657,7 +1657,7 @@ vnc_password= "{vnc_passwd}" else: raise AssertionError("Unknown disk device") else: - b.wait_in_text(f"#vm-{name}-disks .pf-c-empty-state", "No disks defined") + b.wait_in_text(f"#vm-{name}-disks .pf-v5-c-empty-state", "No disks defined") b.click(f"#vm-{name}-disks-adddisk") b.click(f"#vm-{name}-disks-adddisk-dialog-cancel") return self @@ -1690,15 +1690,15 @@ vnc_password= "{vnc_passwd}" # wait until virt-install process is finished wait(lambda: "virt-install" not in self.machine.execute("ps aux | grep '[v]irt-install --connect' || true")) - b.wait_in_text("#virtual-machines-listing .pf-c-empty-state", "No VM is running") + b.wait_in_text("#virtual-machines-listing .pf-v5-c-empty-state", "No VM is running") # wait for the vm and disks to be deleted self.machine.execute("until test -z $(virsh list --all --name); do sleep 1; done") self.machine.execute("until test -z $(ls /home/admin/.local/share/libvirt/images/ 2>/dev/null); do sleep 1; done") # When we delete a VM while virt-install is running there will be an error - while (b.is_present(".pf-c-alert-group li")): - b.click(".pf-c-alert-group li:first-of-type .pf-c-alert button.pf-m-plain") - b.wait_not_present(".pf-c-alert-group") + while (b.is_present(".pf-v5-c-alert-group li")): + b.click(".pf-v5-c-alert-group li:first-of-type .pf-v5-c-alert button.pf-m-plain") + b.wait_not_present(".pf-v5-c-alert-group") return self @@ -1765,8 +1765,8 @@ vnc_password= "{vnc_passwd}" b.wait_in_text("#token-helper-message", error_msg) b.wait_in_text("#token-helper-message", "Get a new RHSM token") if create_disabled: - b.wait_visible(".pf-c-modal-box__footer button:contains(Create and run)[aria-disabled=true]") - b.wait_visible(".pf-c-modal-box__footer button:contains(Create and edit)[aria-disabled=true]") + b.wait_visible(".pf-v5-c-modal-box__footer button:contains(Create and run)[aria-disabled=true]") + b.wait_visible(".pf-v5-c-modal-box__footer button:contains(Create and edit)[aria-disabled=true]") dialog.cancel() @@ -1869,7 +1869,7 @@ vnc_password= "{vnc_passwd}" dialog.open() \ .fill() \ - b.click(".pf-c-modal-box__footer button:contains(Create and edit)") + b.click(".pf-v5-c-modal-box__footer button:contains(Create and edit)") b.wait_not_present("#create-vm-dialog") wait(lambda: "fedora28" in m.execute("virsh dumpxml VmNotInstalled"), delay=3) @@ -1888,11 +1888,11 @@ vnc_password= "{vnc_passwd}" b.set_input_text("#vm-VmNotInstalled-memory-modal-memory", "130") b.blur("#vm-VmNotInstalled-memory-modal-memory") b.click("#vm-VmNotInstalled-memory-modal-save") - b.wait_not_present(".pf-c-modal-box__body") + b.wait_not_present(".pf-v5-c-modal-box__body") # Change vCPUs setting b.click("#vm-VmNotInstalled-cpu button") - b.wait_visible(".pf-c-modal-box__body") + b.wait_visible(".pf-v5-c-modal-box__body") b.set_input_text("#machines-vcpu-max-field input", "8") b.blur("#machines-vcpu-max-field") b.set_input_text("#machines-vcpu-count-field input", "2") @@ -1901,16 +1901,16 @@ vnc_password= "{vnc_passwd}" b.select_from_dropdown("#coresSelect", "2") b.select_from_dropdown("#threadsSelect", "2") b.click("#machines-cpu-modal-dialog-apply") - b.wait_not_present(".pf-c-modal-box__body") + b.wait_not_present(".pf-v5-c-modal-box__body") # Change Boot Order setting bootOrder = b.text("#vm-VmNotInstalled-boot-order") b.click("#vm-VmNotInstalled-boot-order button") - b.wait_visible(".pf-c-modal-box__body") + b.wait_visible(".pf-v5-c-modal-box__body") b.set_checked("#vm-VmNotInstalled-order-modal-device-1-checkbox", True) b.click("#vm-VmNotInstalled-order-modal-device-row-0 #vm-VmNotInstalled-order-modal-down") b.click("#vm-VmNotInstalled-order-modal-save") - b.wait_not_present(".pf-c-modal-box__body") + b.wait_not_present(".pf-v5-c-modal-box__body") # Attach some interface m.execute("virsh attach-interface --persistent VmNotInstalled bridge virbr0") @@ -1920,10 +1920,10 @@ vnc_password= "{vnc_passwd}" # Change the os boot firmware configuration b.wait_in_text("#vm-VmNotInstalled-firmware", "BIOS") b.click("#vm-VmNotInstalled-firmware") - b.wait_visible(".pf-c-modal-box__body") - b.select_from_dropdown(".pf-c-modal-box__body select", "efi") + b.wait_visible(".pf-v5-c-modal-box__body") + b.select_from_dropdown(".pf-v5-c-modal-box__body select", "efi") b.click("#firmware-dialog-apply") - b.wait_not_present(".pf-c-modal-box__body") + b.wait_not_present(".pf-v5-c-modal-box__body") b.wait_in_text("#vm-VmNotInstalled-firmware", "UEFI") # Temporarily delete the OVMF binary and check the firmware options again @@ -1944,7 +1944,7 @@ vnc_password= "{vnc_passwd}" b.enter_page('/machines') b.mouse("#vm-VmNotInstalled-firmware-tooltip", "mouseenter") - b.wait_in_text(".pf-c-tooltip", "Libvirt did not detect any UEFI/OVMF firmware image installed on the host") + b.wait_in_text(".pf-v5-c-tooltip", "Libvirt did not detect any UEFI/OVMF firmware image installed on the host") b.mouse("#vm-VmNotInstalled-firmware-tooltip", "mouseleave") b.wait_not_present("#missing-uefi-images") m.execute("umount " + ovmf_path) @@ -1967,18 +1967,18 @@ vnc_password= "{vnc_passwd}" b.wait_val("#vm-VmNotInstalled-memory-modal-max-memory", "150") b.wait_val("#vm-VmNotInstalled-memory-modal-memory", "130") b.click("#vm-VmNotInstalled-memory-modal-cancel") - b.wait_not_present(".pf-c-modal-box__body") + b.wait_not_present(".pf-v5-c-modal-box__body") # Check vCPU settings have persisted b.click("#vm-VmNotInstalled-cpu button") - b.wait_visible(".pf-c-modal-box__body") + b.wait_visible(".pf-v5-c-modal-box__body") b.wait_val("#machines-vcpu-max-field input", "8") b.wait_val("#machines-vcpu-count-field input", "2") b.wait_val("#socketsSelect", "2") b.wait_val("#coresSelect", "2") b.wait_val("#threadsSelect", "2") b.click("#machines-cpu-modal-dialog-cancel") - b.wait_not_present(".pf-c-modal-box__body") + b.wait_not_present(".pf-v5-c-modal-box__body") # Check changed boot order have persisted b.wait_text_not("#vm-VmNotInstalled-boot-order", bootOrder) @@ -2017,7 +2017,7 @@ vnc_password= "{vnc_passwd}" create_and_run=False) dialog.open().fill() - b.click(".pf-c-modal-box__footer #create-and-edit") + b.click(".pf-v5-c-modal-box__footer #create-and-edit") b.wait_not_present("#create-vm-dialog") self.waitVmPage("VmNotInstalledBios") @@ -2025,10 +2025,10 @@ vnc_password= "{vnc_passwd}" # Show and keep the os boot firmware configuration b.wait_in_text("#vm-VmNotInstalledBios-firmware", "BIOS") b.click("#vm-VmNotInstalledBios-firmware") - b.wait_visible(".pf-c-modal-box__body") - b.wait_val(".pf-c-modal-box__body select", "bios") + b.wait_visible(".pf-v5-c-modal-box__body") + b.wait_val(".pf-v5-c-modal-box__body select", "bios") b.click("#firmware-dialog-apply") - b.wait_not_present(".pf-c-modal-box__body") + b.wait_not_present(".pf-v5-c-modal-box__body") b.wait_in_text("#vm-VmNotInstalledBios-firmware", "BIOS") # Install the VM @@ -2068,8 +2068,8 @@ vnc_password= "{vnc_passwd}" os_short_id=config.RHEL_8_1_SHORTID) \ .open() \ .fill() - b.wait_visible(".pf-c-modal-box__footer button:contains(Create and run)[aria-disabled=false]") - b.wait_visible(".pf-c-modal-box__footer button:contains(Create and edit)[aria-disabled=false]") + b.wait_visible(".pf-v5-c-modal-box__footer button:contains(Create and run)[aria-disabled=false]") + b.wait_visible(".pf-v5-c-modal-box__footer button:contains(Create and edit)[aria-disabled=false]") dialog.cancel() runner.checkDialogErrorTest(TestMachinesCreate.VmDialog(self, sourceType='os', Index: cockpit-machines-292/test/check-machines-disks =================================================================== --- cockpit-machines-292.orig/test/check-machines-disks +++ cockpit-machines-292/test/check-machines-disks @@ -85,7 +85,7 @@ class TestMachinesDisks(VirtualMachinesC def save(target, xfail=None): b.click(f"#vm-subVmTest1-disks-{target}-edit-dialog-save") if xfail: - b.wait_in_text(f"#vm-subVmTest1-disks-{target}-edit-dialog .pf-c-alert", xfail) + b.wait_in_text(f"#vm-subVmTest1-disks-{target}-edit-dialog .pf-v5-c-alert", xfail) else: b.wait_not_present(f"#vm-subVmTest1-disks-{target}-edit-dialog") @@ -117,7 +117,7 @@ class TestMachinesDisks(VirtualMachinesC # Test close button open("vdg") - b.click("#vm-subVmTest1-disks-vdg-edit-dialog > .pf-c-modal-box__close button") + b.click("#vm-subVmTest1-disks-vdg-edit-dialog > .pf-v5-c-modal-box__close button") b.wait_not_present("#vm-subVmTest1-disks-vdg-edit-dialog") # Test qcow2 disk has only readonly attribute configurable @@ -194,7 +194,7 @@ class TestMachinesDisks(VirtualMachinesC save("sdb", "readonly sata disks are not supported") cancel("sdb") open("sdb") - b.wait_not_present("#vm-subVmTest1-disks-sdb-edit-dialog .pf-c-alert") + b.wait_not_present("#vm-subVmTest1-disks-sdb-edit-dialog .pf-v5-c-alert") cancel("sdb") # Virtio bus type should not be shown for CDROM devices @@ -279,7 +279,7 @@ class TestMachinesDisks(VirtualMachinesC b.select_from_dropdown("#vm-subVmTest1-disks-adddisk-existing-select-pool", "images") b.select_from_dropdown("#vm-subVmTest1-disks-adddisk-existing-select-volume", "subVmTest2-2.img") b.wait_in_text("#vm-subVmTest1-disks-adddisk-existing-select-volume-helper", "used by subVmTest2") - b.click(".pf-c-modal-box__footer button:contains(Cancel)") + b.click(".pf-v5-c-modal-box__footer button:contains(Cancel)") # Test remove disk - by external action m.execute("virsh detach-disk subVmTest1 vdc") @@ -352,7 +352,7 @@ class TestMachinesDisks(VirtualMachinesC b = self.test_obj.browser prefix = f"#vm-{self.vm_name}-disks-{self.target}-insert" b.click(prefix) # button - b.wait_in_text(".pf-c-modal-box__title", "Insert disc media") + b.wait_in_text(".pf-v5-c-modal-box__title", "Insert disc media") b.wait_visible(f"{prefix}-dialog-adddisk-custompath:checked") if self.mode == "use-existing": @@ -377,13 +377,13 @@ class TestMachinesDisks(VirtualMachinesC def insert(self): b = self.test_obj.browser - b.click(".pf-c-modal-box__footer button:contains(Insert)") + b.click(".pf-v5-c-modal-box__footer button:contains(Insert)") return self def verify(self): b = self.test_obj.browser - b.wait_not_present(".pf-c-modal-box") + b.wait_not_present(".pf-v5-c-modal-box") disks = self._get_disks() @@ -408,7 +408,7 @@ class TestMachinesDisks(VirtualMachinesC def eject(self): b = self.test_obj.browser b.click(f"#vm-{self.vm_name}-disks-{self.target}-eject-button") # button - b.wait_in_text(".pf-c-modal-box__title", "Eject disc from VM") + b.wait_in_text(".pf-v5-c-modal-box__title", "Eject disc from VM") if self.mode == "custom-path": b.wait_in_text(f"#vm-{self.vm_name}-disks-{self.target}-modal-description-file", self.file_path) @@ -416,8 +416,8 @@ class TestMachinesDisks(VirtualMachinesC b.wait_in_text(f"#vm-{self.vm_name}-disks-{self.target}-modal-description-pool dd", self.pool_name) b.wait_in_text(f"#vm-{self.vm_name}-disks-{self.target}-modal-description-volume dd", self.volume_name) - b.click(".pf-c-modal-box__footer button:contains(Eject)") - b.wait_not_present(".pf-c-modal-box") + b.click(".pf-v5-c-modal-box__footer button:contains(Eject)") + b.wait_not_present(".pf-v5-c-modal-box") return self @@ -426,7 +426,7 @@ class TestMachinesDisks(VirtualMachinesC m = self.test_obj.machine b.click(f"#vm-{self.vm_name}-disks-{self.target}-eject-button") # button - b.wait_in_text(".pf-c-modal-box__title", "Eject disc from VM") + b.wait_in_text(".pf-v5-c-modal-box__title", "Eject disc from VM") # "Force eject" button is only shown if regular ejection fail # This might be a bit dirty, but one easy way to cause regular ejection to @@ -434,11 +434,11 @@ class TestMachinesDisks(VirtualMachinesC # This will return "domain is not running" failure, but that's fine, as we # offer "Force eject" option after any kind of failure m.execute(f"virsh destroy {self.vm_name}") - b.click(".pf-c-modal-box__footer button:contains(Eject)") + b.click(".pf-v5-c-modal-box__footer button:contains(Eject)") # Check "Force eject" is present and Regular eject is disabled - b.wait_visible(".pf-c-modal-box__footer button:contains(Eject):disabled") - b.wait_visible(".pf-c-modal-box__footer button:contains(Force eject)") + b.wait_visible(".pf-v5-c-modal-box__footer button:contains(Eject):disabled") + b.wait_visible(".pf-v5-c-modal-box__footer button:contains(Force eject)") # Start the VM again so "Force eject" will work m.execute(f"virsh start {self.vm_name}") @@ -449,8 +449,8 @@ class TestMachinesDisks(VirtualMachinesC m.spawn("dbus-monitor --system \"interface='org.libvirt.Domain',member='UpdateDevice'\" > /tmp/dbus_monitor_logs", "dbusmonitor") # Force eject the disc - b.click(".pf-c-modal-box__footer button:contains(Force eject)") - b.wait_not_present(".pf-c-modal-box") + b.click(".pf-v5-c-modal-box__footer button:contains(Force eject)") + b.wait_not_present(".pf-v5-c-modal-box") # Check dbus call was called with "VIR_DOMAIN_DEVICE_MODIFY_FORCE" flag # Flag 'uint32 7' is a logical OR of flags: @@ -563,14 +563,14 @@ class TestMachinesDisks(VirtualMachinesC if self.xfail_object: self.test_obj.browser.wait_in_text(f"{prefix}-{self.xfail_object}-helper.pf-m-error", self.xfail_error_message) else: - self.test_obj.browser.wait_in_text(".pf-c-modal-box__body .pf-c-alert__title", self.xfail_error_title) + self.test_obj.browser.wait_in_text(".pf-v5-c-modal-box__body .pf-v5-c-alert__title", self.xfail_error_title) self.test_obj.browser.click(f"{prefix}-dialog-cancel") def open(self): b = self.test_obj.browser prefix = f"#vm-{self.vm_name}-disks-adddisk" b.click(prefix) # button - b.wait_in_text(".pf-c-modal-box__title", "Add disk") + b.wait_in_text(".pf-v5-c-modal-box__title", "Add disk") b.wait_visible(f"{prefix}-createnew:checked") if self.mode == "use-existing": @@ -590,7 +590,7 @@ class TestMachinesDisks(VirtualMachinesC else: b.click(f"#vm-{self.vm_name}-disks-adddisk-new-select-pool") # Our custom select does not respond on the click function - b._wait_present(f".pf-c-modal-box option[value={self.pool_name}]:disabled") + b._wait_present(f".pf-v5-c-modal-box option[value={self.pool_name}]:disabled") return self # Insert name for the new volume @@ -626,8 +626,8 @@ class TestMachinesDisks(VirtualMachinesC # Expand additional options if self.cache_mode or self.bus_type or self.serial: - b.click("div.pf-c-modal-box button:contains(Show additional options)") - b.wait_visible("div.pf-c-modal-box button[aria-expanded=true]:contains(Hide additional options)") + b.click("div.pf-v5-c-modal-box button:contains(Show additional options)") + b.wait_visible("div.pf-v5-c-modal-box button[aria-expanded=true]:contains(Hide additional options)") # Configure performance options if self.cache_mode: @@ -635,7 +635,7 @@ class TestMachinesDisks(VirtualMachinesC # Configure bus type if self.bus_type: - b.select_from_dropdown(f"div.pf-c-modal-box #vm-{self.vm_name}-disks-adddisk-bus-type", self.bus_type) + b.select_from_dropdown(f"div.pf-v5-c-modal-box #vm-{self.vm_name}-disks-adddisk-bus-type", self.bus_type) # Configure serial number if self.serial: @@ -647,22 +647,22 @@ class TestMachinesDisks(VirtualMachinesC b.wait_val(f"#vm-{self.vm_name}-disks-adddisk-serial", self.expected_serial) if self.xwarning_object == 'serial-characters': - b.wait_in_text("#serial-characters-message .pf-c-helper-text__item-text", self.xwarning_message) + b.wait_in_text("#serial-characters-message .pf-v5-c-helper-text__item-text", self.xwarning_message) elif self.xwarning_object == 'serial-length': - b.wait_in_text("#serial-length-message .pf-c-helper-text__item-text", self.xwarning_message) + b.wait_in_text("#serial-length-message .pf-v5-c-helper-text__item-text", self.xwarning_message) else: b.wait_not_present("#serial-length-message") b.wait_not_present("#serial-characters-message") else: b.wait_not_visible("#cache-mode") - b.wait_not_visible(f"div.pf-c-modal-box #vm-{self.vm_name}-disks-adddisk-bus-type") + b.wait_not_visible(f"div.pf-v5-c-modal-box #vm-{self.vm_name}-disks-adddisk-bus-type") b.wait_not_visible(f"#vm-{self.vm_name}-disks-adddisk-serial") return self def add_disk(self): b = self.test_obj.browser - b.click(".pf-c-modal-box__footer button:contains(Add)") + b.click(".pf-v5-c-modal-box__footer button:contains(Add)") return self @@ -690,7 +690,7 @@ class TestMachinesDisks(VirtualMachinesC # Check volume was added to pool's volume list if self.mode == "create-new": self.test_obj.goToMainPage() - b.click(".pf-c-card .pf-c-card__header button:contains(Storage pool)") + b.click(".pf-v5-c-card .pf-v5-c-card__header button:contains(Storage pool)") self.test_obj.waitPoolRow(self.pool_name) self.test_obj.togglePoolRow(self.pool_name) @@ -846,7 +846,7 @@ class TestMachinesDisks(VirtualMachinesC volume_size_unit='MiB', expected_target=get_next_free_target(used_targets)[-1], pixel_test_tag='vm-add-disk-modal-nfs', - pixel_test_ignore='.pf-c-modal-box__footer', # FIXME: The buttons size seems to change undeterministically + pixel_test_ignore='.pf-v5-c-modal-box__footer', # FIXME: The buttons size seems to change undeterministically ).execute() self.VMAddDiskDialog( @@ -905,7 +905,7 @@ class TestMachinesDisks(VirtualMachinesC volume_size_unit='MiB', expected_target=get_next_free_target(used_targets)[-1], pixel_test_tag='vm-add-disk-modal-disk-pool', - pixel_test_ignore='.pf-c-modal-box__footer', # FIXME: The buttons size seems to change undeterministically + pixel_test_ignore='.pf-v5-c-modal-box__footer', # FIXME: The buttons size seems to change undeterministically ).execute() self.VMAddDiskDialog( @@ -1164,7 +1164,7 @@ class TestMachinesDisks(VirtualMachinesC xfail_error_message='Importing an image with a backing file is unsupported', ).execute() # Image can't be added, close dialog - b.click(".pf-c-modal-box__footer button:contains(Cancel)") + b.click(".pf-v5-c-modal-box__footer button:contains(Cancel)") # non iso file self.VMAddDiskDialog( @@ -1204,7 +1204,7 @@ class TestMachinesDisks(VirtualMachinesC self, mode='custom-path' ).open() - b.click(f"{prefix}-file .pf-c-select__toggle-button") + b.click(f"{prefix}-file .pf-v5-c-select__toggle-button") b.wait_visible(f"{prefix}-file-autocomplete") b.key_press(chr(40), use_ord=True) b.focus(f"{prefix}-file-autocomplete li:first-child") @@ -1240,7 +1240,7 @@ class TestMachinesDisks(VirtualMachinesC b.click(prefix) b.click(f"{prefix}-custompath") b.select_from_dropdown(f"{prefix}-select-device", "disk") - b.click("div.pf-c-modal-box button:contains(Show additional options)") + b.click("div.pf-v5-c-modal-box button:contains(Show additional options)") b.wait_visible(f"{prefix}-bus-type[data-value=ide]") def testAddDiskAdditionalOptions(self): @@ -1436,12 +1436,12 @@ class TestMachinesDisks(VirtualMachinesC b.click("#vm-subVmTest1-disks-vdc-action-kebab button") b.wait_visible("#delete-vm-subVmTest1-disks-vdc") b.click("#delete-vm-subVmTest1-disks-vdc") - b.wait_visible(".pf-c-modal-box") - b.wait_in_text(".pf-c-modal-box__body .pf-c-description-list", "subVmTest1") + b.wait_visible(".pf-v5-c-modal-box") + b.wait_in_text(".pf-v5-c-modal-box__body .pf-v5-c-description-list", "subVmTest1") b.wait_in_text("#delete-resource-modal-target", "vdc") b.wait_in_text("#delete-resource-modal-file", vdc_path) b.click("#delete-resource-modal-primary") - b.wait_not_present(".pf-c-modal-box") + b.wait_not_present(".pf-v5-c-modal-box") # Wait for underlying VM's OS to detach the disk wait(lambda: "vdc" not in m.execute("virsh domblklist subVmTest1"), delay=1) b.wait_not_present("#vm-subVmTest1-disks-vdc-device") @@ -1458,10 +1458,10 @@ class TestMachinesDisks(VirtualMachinesC b.click("#delete-vm-subVmTest1-disks-vdd") b.wait_in_text("#delete-resource-modal-target", "vdd") b.wait_in_text("#delete-resource-modal-file", vdd_path) - b.wait_visible(".pf-c-modal-box") + b.wait_visible(".pf-v5-c-modal-box") b.click("#delete-resource-modal-primary") b.wait_not_present("#vm-subVmTest1-disks-vdd-device") - b.wait_not_present(".pf-c-modal-box") + b.wait_not_present(".pf-v5-c-modal-box") # Test detaching several disks and the deletion dialog can be closed correctly m.execute("virsh vol-create-as myPoolOne diskVirtio --capacity 1M --format qcow2") @@ -1523,12 +1523,12 @@ class TestMachinesDisks(VirtualMachinesC if removeFileFail: # Check Toast notification is present - b.wait_visible(".pf-c-alert.pf-m-warning") - b.wait_in_text(".pf-c-alert.pf-m-warning .pf-c-alert__title", "Could not delete") + b.wait_visible(".pf-v5-c-alert.pf-m-warning") + b.wait_in_text(".pf-v5-c-alert.pf-m-warning .pf-v5-c-alert__title", "Could not delete") # Cleanup Toast notification - b.click(".pf-c-alert-group li:first-of-type .pf-c-alert button.pf-m-plain") + b.click(".pf-v5-c-alert-group li:first-of-type .pf-v5-c-alert button.pf-m-plain") - b.wait_not_present(".pf-c-alert.pf-m-warning") + b.wait_not_present(".pf-v5-c-alert.pf-m-warning") # Verify correctness of disk file if path: @@ -1569,9 +1569,9 @@ class TestMachinesDisks(VirtualMachinesC b.click("#vm-subVmTest1-disks-vdc-action-kebab button") b.wait_visible("#vm-subVmTest1-disks-vdc-device") b.click("#delete-vm-subVmTest1-disks-vdc") - b.wait_visible(".pf-c-modal-box") + b.wait_visible(".pf-v5-c-modal-box") b.click("#delete-resource-modal-primary") - b.wait_not_present(".pf-c-modal-box") + b.wait_not_present(".pf-v5-c-modal-box") wait(lambda: "vdc" not in m.execute("virsh domblklist subVmTest1"), delay=1) b.wait_not_present("#vm-subVmTest1-disks-vdc-device") Index: cockpit-machines-292/test/check-machines-filesystems =================================================================== --- cockpit-machines-292.orig/test/check-machines-filesystems +++ cockpit-machines-292/test/check-machines-filesystems @@ -65,7 +65,7 @@ class TestMachinesFilesystems(VirtualMac b.click("#vm-subVmTest1-filesystems-add") b.set_file_autocomplete_val("#vm-subVmTest1-filesystems-modal-source-group", "/tmp/dir1/") b.set_input_text("#vm-subVmTest1-filesystems-modal-mountTag", "dir1") - b.click(".pf-c-expandable-section__toggle") + b.click(".pf-v5-c-expandable-section__toggle") b.wait_visible("#vm-subVmTest1-filesystems-modal-xattr:not(:checked)") b.set_checked("#vm-subVmTest1-filesystems-modal-xattr", True) @@ -87,7 +87,7 @@ class TestMachinesFilesystems(VirtualMac b.click("#vm-subVmTest1-filesystems-add") b.set_file_autocomplete_val("#vm-subVmTest1-filesystems-modal-source-group", "/tmp/dir2/") b.set_input_text("#vm-subVmTest1-filesystems-modal-mountTag", "dir2") - b.click(".pf-c-expandable-section__toggle") + b.click(".pf-v5-c-expandable-section__toggle") b.set_checked("#vm-subVmTest1-filesystems-modal-xattr", False) b.click("#vm-subVmTest1-filesystems-modal-add") @@ -106,8 +106,8 @@ class TestMachinesFilesystems(VirtualMac b.set_input_text("#vm-subVmTest1-filesystems-modal-mountTag", "dir1") b.click("#vm-subVmTest1-filesystems-modal-add") if m.image not in ['debian-stable']: - b.wait_in_text(".pf-c-alert", "Failed to add shared directory") - b.wait_in_text(".pf-c-alert", "filesystem target 'dir1' specified twice") + b.wait_in_text(".pf-v5-c-alert", "Failed to add shared directory") + b.wait_in_text(".pf-v5-c-alert", "filesystem target 'dir1' specified twice") b.click("#vm-subVmTest1-filesystems-modal-cancel") else: # Due to a libvirt < 7.5.0 bug this will be actually added without an error: @@ -140,7 +140,7 @@ class TestMachinesFilesystems(VirtualMac m.execute("virt-xml subVmTest1 --add-device --filesystem source=/tmp/dir1/,target=dir1") b.wait_visible("tr[data-row-id='vm-subVmTest1-filesystem-/tmp/dir1/-dir1']") b.click("tr[data-row-id='vm-subVmTest1-filesystem-/tmp/dir1/-dir1'] button:contains(Remove)") - b.wait_in_text(".pf-c-modal-box__body .pf-c-description-list", "removed from subVmTest1") + b.wait_in_text(".pf-v5-c-modal-box__body .pf-v5-c-description-list", "removed from subVmTest1") b.wait_in_text("#delete-resource-modal-source-path", "/tmp/dir1/") b.wait_in_text("#delete-resource-modal-mount-tag", "dir1") Index: cockpit-machines-292/test/check-machines-hostdevs =================================================================== --- cockpit-machines-292.orig/test/check-machines-hostdevs +++ cockpit-machines-292/test/check-machines-hostdevs @@ -54,7 +54,7 @@ class TestMachinesHostDevs(VirtualMachin self.goToVmPage("subVmTest1") - b.wait_in_text("#vm-subVmTest1-hostdevs .pf-c-empty-state__body", "No host devices assigned to this VM") + b.wait_in_text("#vm-subVmTest1-hostdevs .pf-v5-c-empty-state__body", "No host devices assigned to this VM") # Test hot plug of USB host device # A usb device might not always be present @@ -161,28 +161,28 @@ class TestMachinesHostDevs(VirtualMachin def open(self): b.wait_not_present(f"#vm-subVmTest1-hostdev-{self.vm_dev_id}-product") b.click("button#vm-subVmTest1-hostdevs-add") - b.wait_in_text(".pf-c-modal-box .pf-c-modal-box__header .pf-c-modal-box__title", "Add host device") + b.wait_in_text(".pf-v5-c-modal-box .pf-v5-c-modal-box__header .pf-v5-c-modal-box__title", "Add host device") if connectionName != "session": - b.assert_pixels(".pf-c-modal-box", "vm-hostdevs-add-dialog", skip_layouts=["rtl"]) + b.assert_pixels(".pf-v5-c-modal-box", "vm-hostdevs-add-dialog", skip_layouts=["rtl"]) def fill(self): b.click(f"input#{self.dev_type}") - b.set_checked(f".pf-c-table input[name='checkrow{self.dev_id}']", True) + b.set_checked(f".pf-v5-c-table input[name='checkrow{self.dev_id}']", True) self._model = b.text(f"#vm-subVmTest1-hostdevs-dialog table tbody tr:nth-child({self.dev_id + 1}) td:nth-child(2)") self._vendor = b.text(f"#vm-subVmTest1-hostdevs-dialog table tbody tr:nth-child({self.dev_id + 1}) td:nth-child(3)") if self.dev_type == "pci": self._slot = b.text(f"#vm-subVmTest1-hostdevs-dialog table tbody tr:nth-child({self.dev_id + 1}) td:nth-child(4) dd") def cancel(self): - b.click(".pf-c-modal-box__footer button:contains(Cancel)") + b.click(".pf-v5-c-modal-box__footer button:contains(Cancel)") b.wait_not_present("#vm-subVmTest1-hostdevs-dialog") def add(self): self.run_admin(f"virsh -c qemu:///{connectionName} dumpxml subVmTest1 > /tmp/vmdir/vmxml1", connectionName) - b.click(".pf-c-modal-box__footer button:contains(Add)") + b.click(".pf-v5-c-modal-box__footer button:contains(Add)") if self.fail_message: - b.wait_in_text(".pf-c-modal-box__body .pf-c-alert__title", self.fail_message) - b.click(".pf-c-modal-box__footer button:contains(Cancel)") + b.wait_in_text(".pf-v5-c-modal-box__body .pf-v5-c-alert__title", self.fail_message) + b.click(".pf-v5-c-modal-box__footer button:contains(Cancel)") b.wait_not_present("#vm-subVmTest1-hostdevs-dialog") def verify(self): @@ -227,12 +227,12 @@ class TestMachinesHostDevs(VirtualMachin def remove(self): b.click(f"#delete-vm-subVmTest1-hostdev-{self.vm_dev_id}") - b.wait_in_text(".pf-c-modal-box__body .pf-c-description-list", "subVmTest1") + b.wait_in_text(".pf-v5-c-modal-box__body .pf-v5-c-description-list", "subVmTest1") if (self._model != "(Undefined)"): b.wait_in_text("#delete-resource-modal-product", self._model) b.wait_in_text("#delete-resource-modal-vendor", self._vendor) - b.click('.pf-c-modal-box__footer button:contains("Remove")') + b.click('.pf-v5-c-modal-box__footer button:contains("Remove")') b.wait_not_present(f"#vm-subVmTest1-hostdev-{self.vm_dev_id}-product") # Check the error if selecting no devices when the VM is running @@ -285,13 +285,13 @@ class TestMachinesHostDevs(VirtualMachin b.wait_not_present("#vm-subVmTest1-hostdev-1-product") b.click("button#vm-subVmTest1-hostdevs-add") - b.wait_in_text(".pf-c-modal-box .pf-c-modal-box__header .pf-c-modal-box__title", "Add host device") + b.wait_in_text(".pf-v5-c-modal-box .pf-v5-c-modal-box__header .pf-v5-c-modal-box__title", "Add host device") b.click("input#pci") - b.set_checked(".pf-c-table input[name='checkrow0']", True) + b.set_checked(".pf-v5-c-table input[name='checkrow0']", True) slot1 = b.text("#vm-subVmTest1-hostdevs-dialog table tbody tr:nth-child(1) td:nth-child(4) dd") - b.set_checked(".pf-c-table input[name='checkrow1']", True) + b.set_checked(".pf-v5-c-table input[name='checkrow1']", True) slot2 = b.text("#vm-subVmTest1-hostdevs-dialog table tbody tr:nth-child(2) td:nth-child(4) dd") # PCI devies will be sorted in the UI by slot @@ -299,7 +299,7 @@ class TestMachinesHostDevs(VirtualMachin (slot1, slot2) = (slot2, slot1) self.run_admin(f"virsh -c qemu:///{connectionName} dumpxml subVmTest1 > /tmp/vmdir/vmxml1", connectionName) - b.click(".pf-c-modal-box__footer button:contains(Add)") + b.click(".pf-v5-c-modal-box__footer button:contains(Add)") b.wait_not_present("#vm-subVmTest1-hostdevs-dialog") b.wait_visible("#vm-subVmTest1-hostdev-1-product") Index: cockpit-machines-292/test/check-machines-lifecycle =================================================================== --- cockpit-machines-292.orig/test/check-machines-lifecycle +++ cockpit-machines-292/test/check-machines-lifecycle @@ -84,7 +84,7 @@ class TestMachinesLifecycle(VirtualMachi if expect_empty_list: with b.wait_timeout(20): - b.wait_in_text("#virtual-machines-listing .pf-c-empty-state", "No VM is running") + b.wait_in_text("#virtual-machines-listing .pf-v5-c-empty-state", "No VM is running") return self.waitPageInit() self.waitVmRow("subVmTest1") @@ -108,7 +108,7 @@ class TestMachinesLifecycle(VirtualMachi m.execute("virt-xml subVmTest1 --edit --watchdog action=pause") b.wait_visible("#vm-subVmTest1-needs-shutdown") b.click("#vm-subVmTest1-needs-shutdown") - b.wait_in_text(".pf-c-popover__body", message) + b.wait_in_text(".pf-v5-c-popover__body", message) m.execute("virt-xml subVmTest1 --remove-device --watchdog 1 --update") checkConnectionDescription("#import-existing-vm", "Ideal for server VMs") @@ -121,8 +121,8 @@ class TestMachinesLifecycle(VirtualMachi b.assert_pixels("#vm-details", "vm-details", ignore=[ ".memory-usage-chart", ".vcpu-usage-chart", - "#vm-subVmTest1-disks .pf-c-card__body", - "#vm-subVmTest1-networks .pf-c-card__body" + "#vm-subVmTest1-disks .pf-v5-c-card__body", + "#vm-subVmTest1-networks .pf-v5-c-card__body" ]) b.wait_in_text("#vm-subVmTest1-cpu", "1 vCPU") @@ -132,13 +132,13 @@ class TestMachinesLifecycle(VirtualMachi # switch to and check Usage b.click("#vm-subVmTest1-usage") - b.wait_in_text(".memory-usage-chart .pf-c-progress__status > .pf-c-progress__measure", "128 MiB") - b.wait_not_in_text(".memory-usage-chart .pf-c-progress__status > .pf-c-progress__measure", "0 /") - usage = b.text(".memory-usage-chart .pf-c-progress__status > .pf-c-progress__measure").split("/ 128 MiB")[0] + b.wait_in_text(".memory-usage-chart .pf-v5-c-progress__status > .pf-v5-c-progress__measure", "128 MiB") + b.wait_not_in_text(".memory-usage-chart .pf-v5-c-progress__status > .pf-v5-c-progress__measure", "0 /") + usage = b.text(".memory-usage-chart .pf-v5-c-progress__status > .pf-v5-c-progress__measure").split("/ 128 MiB")[0] wait(lambda: float(usage) > 0.0, delay=3) - b.wait_in_text(".vcpu-usage-chart .pf-c-progress__status > .pf-c-progress__measure", "1 vCPU") - usage = b.text(".vcpu-usage-chart .pf-c-progress__status > .pf-c-progress__measure").split("% of 1 vCPU")[0] + b.wait_in_text(".vcpu-usage-chart .pf-v5-c-progress__status > .pf-v5-c-progress__measure", "1 vCPU") + usage = b.text(".vcpu-usage-chart .pf-v5-c-progress__status > .pf-v5-c-progress__measure").split("% of 1 vCPU")[0] # CPU usage cannot be nonzero with blank image, so just ensure it's a percentage wait(lambda: float(usage) <= 100.0, delay=3) @@ -199,15 +199,15 @@ class TestMachinesLifecycle(VirtualMachi self.performAction("subVmTest1", "forceOff") # continue shut off validation - usage should drop to zero - b.wait_in_text(".memory-usage-chart .pf-c-progress__status > .pf-c-progress__measure", "0 /") - b.wait_in_text(".vcpu-usage-chart .pf-c-progress__status > .pf-c-progress__measure", "0%") + b.wait_in_text(".memory-usage-chart .pf-v5-c-progress__status > .pf-v5-c-progress__measure", "0 /") + b.wait_in_text(".vcpu-usage-chart .pf-v5-c-progress__status > .pf-v5-c-progress__measure", "0%") # shut off of a transient VM will redirect us to the main page m.execute("virsh dumpxml subVmTest1 > /tmp/subVmTest1.xml") m.execute("virsh start {0}; virsh undefine {0}".format("subVmTest1")) b.wait_visible("div[data-vm-transient=\"true\"]") self.performAction("subVmTest1", "forceOff", checkExpectedState=False) - b.wait_in_text("#virtual-machines-listing .pf-c-empty-state", "No VM is running") + b.wait_in_text("#virtual-machines-listing .pf-v5-c-empty-state", "No VM is running") m.execute("virsh define --file /tmp/subVmTest1.xml") # start another one, should appear automatically @@ -269,13 +269,13 @@ class TestMachinesLifecycle(VirtualMachi # Try to run subVmTest1 - it will fail because of inactive default network tryRunDomain(1, 'subVmTest1', 'system') b.click('#vm-subVmTest1-system-state button:contains("view more")') - b.wait_in_text(".pf-c-popover", "VM subVmTest1 failed to start") + b.wait_in_text(".pf-v5-c-popover", "VM subVmTest1 failed to start") b.click('#vm-subVmTest1-system-state button[aria-label=Close]') # Try to run subVmTest2 tryRunDomain(2, 'subVmTest2', 'system') b.click('#vm-subVmTest2-system-state button:contains("view more")') - b.wait_in_text(".pf-c-popover", "VM subVmTest2 failed to start") + b.wait_in_text(".pf-v5-c-popover", "VM subVmTest2 failed to start") b.click('#vm-subVmTest2-system-state button[aria-label=Close]') def testCloneSessionConnection(self): @@ -296,9 +296,9 @@ class TestMachinesLifecycle(VirtualMachi self.performAction("subVmTest1", "clone", connectionName=connectionName) - b.wait_text(".pf-c-modal-box__title-text", "Create a clone VM based on subVmTest1") + b.wait_text(".pf-v5-c-modal-box__title-text", "Create a clone VM based on subVmTest1") b.click("footer button.pf-m-primary") - b.wait_not_present(".pf-c-modal-box") + b.wait_not_present(".pf-v5-c-modal-box") self.waitVmRow("subVmTest1-clone", connectionName=connectionName) def testRename(self): @@ -322,7 +322,7 @@ class TestMachinesLifecycle(VirtualMachi b.set_input_text("#rename-dialog-new-name", "new") b.click("#rename-dialog-confirm") - b.wait_in_text(".pf-c-modal-box__body .pf-c-alert.pf-m-danger", "Can't rename domain to itself") + b.wait_in_text(".pf-v5-c-modal-box__body .pf-v5-c-alert.pf-m-danger", "Can't rename domain to itself") self.goToVmPage("new") self.performAction("new", "rename") @@ -378,7 +378,7 @@ class TestMachinesLifecycle(VirtualMachi self.performAction(name, "delete") - b.wait_visible(f"#vm-{name}-delete-modal-dialog .pf-c-modal-box__body:contains(The VM {name} is running)") + b.wait_visible(f"#vm-{name}-delete-modal-dialog .pf-v5-c-modal-box__body:contains(The VM {name} is running)") b.wait_visible(f"#vm-{name}-delete-modal-dialog ul li:first-child .disk-source-file:contains({img2})") # virsh attach-disk does not create disks of type volume b.wait_visible(f"#vm-{name}-delete-modal-dialog .disk-source-volume:contains({secondDiskVolName})") @@ -455,7 +455,7 @@ class TestMachinesLifecycle(VirtualMachi b.wait_visible(f"#vm-{name}-delete-modal-dialog") m.execute(f"virsh snapshot-delete --domain {name} --snapshotname snapshotFails") b.click(f"#vm-{name}-delete-modal-dialog button:contains(Delete)") - b.wait_in_text(f"#vm-{name}-delete-modal-dialog .pf-c-alert__description", "Domain snapshot not found") + b.wait_in_text(f"#vm-{name}-delete-modal-dialog .pf-v5-c-alert__description", "Domain snapshot not found") b.click(f"#vm-{name}-delete-modal-dialog button:contains(Cancel)") m.execute(f"virsh undefine {name}") @@ -505,13 +505,13 @@ class TestMachinesLifecycle(VirtualMachi # Check VM got deleted, but there is a warning about unsuccessful storage deletion self.waitVmRow(name, present=False) wait(lambda: name not in m.execute("virsh list --all --name")) - b.wait_visible(".pf-c-alert-group li .pf-c-alert") - b.wait_in_text(".pf-c-alert-group li .pf-c-alert .pf-c-alert__title", f"Could not delete all storage for {name}") + b.wait_visible(".pf-v5-c-alert-group li .pf-v5-c-alert") + b.wait_in_text(".pf-v5-c-alert-group li .pf-v5-c-alert .pf-v5-c-alert__title", f"Could not delete all storage for {name}") b.click("button.alert-link.more-button") - b.wait_in_text(".pf-c-alert-group li .pf-c-alert .pf-c-alert__description", args['image']) - b.wait_in_text(".pf-c-alert-group li .pf-c-alert .pf-c-alert__description", secondDiskVolName) + b.wait_in_text(".pf-v5-c-alert-group li .pf-v5-c-alert .pf-v5-c-alert__description", args['image']) + b.wait_in_text(".pf-v5-c-alert-group li .pf-v5-c-alert .pf-v5-c-alert__description", secondDiskVolName) # Close the notification - b.click(".pf-c-alert-group li .pf-c-alert button.pf-m-plain") + b.click(".pf-v5-c-alert-group li .pf-v5-c-alert button.pf-m-plain") # Delete a shut-off guest and verify the storage was removed name = "vm-shutoff" Index: cockpit-machines-292/test/check-machines-migrate =================================================================== --- cockpit-machines-292.orig/test/check-machines-migrate +++ cockpit-machines-292/test/check-machines-migrate @@ -190,7 +190,7 @@ class TestMachinesMigration(VirtualMachi b.click("#migrate-button") if fail: with b.wait_timeout(120): - b.wait_visible(".pf-c-modal-box__body .pf-c-alert .pf-c-alert__title:contains('Migration failed')") + b.wait_visible(".pf-v5-c-modal-box__body .pf-v5-c-alert .pf-v5-c-alert__title:contains('Migration failed')") if fail == "libvirtd": machine2.execute(f"systemctl start {self.getLibvirtServiceName()}.service") Index: cockpit-machines-292/test/check-machines-networks =================================================================== --- cockpit-machines-292.orig/test/check-machines-networks +++ cockpit-machines-292/test/check-machines-networks @@ -65,7 +65,7 @@ class TestMachinesNetworks(VirtualMachin m.execute(f"echo \"{TEST_NETWORK4_XML}\" > /tmp/xml; virsh net-create /tmp/xml") # Click on Networks card - b.click(".pf-c-card .pf-c-card__header button:contains(Networks)") + b.click(".pf-v5-c-card .pf-v5-c-card__header button:contains(Networks)") # Check that all networks are there b.wait_in_text("body", "Networks") @@ -127,8 +127,8 @@ class TestMachinesNetworks(VirtualMachin self.waitPageInit() # Click on Networks card - b.wait_in_text("#card-pf-networks .pf-c-card__header button", "Network") - b.click(".pf-c-card .pf-c-card__header button:contains(Network)") + b.wait_in_text("#card-pf-networks .pf-v5-c-card__header button", "Network") + b.click(".pf-v5-c-card .pf-v5-c-card__header button:contains(Network)") class NetworkCreateDialog(object): def __init__( @@ -168,7 +168,7 @@ class TestMachinesNetworks(VirtualMachin def open(self): b.click("#create-network") b.wait_visible("#create-network-dialog") - b.wait_in_text(".pf-c-modal-box .pf-c-modal-box__header .pf-c-modal-box__title", "Create virtual network") + b.wait_in_text(".pf-v5-c-modal-box .pf-v5-c-modal-box__header .pf-v5-c-modal-box__title", "Create virtual network") def fill(self): b.set_input_text("#create-network-name", self.name) @@ -199,22 +199,22 @@ class TestMachinesNetworks(VirtualMachin b.set_input_text("#create-network-ipv6-dhcp-range-end", self.ipv6_dhcp_end) def cancel(self): - b.click(".pf-c-modal-box__footer button:contains(Cancel)") + b.click(".pf-v5-c-modal-box__footer button:contains(Cancel)") b.wait_not_present("#create-network-dialog") def create(self): - b.click(".pf-c-modal-box__footer button:contains(Create)") + b.click(".pf-v5-c-modal-box__footer button:contains(Create)") if (self.xfail): # Check incomplete dialog if "body" in self.xfail_objects: - error_location = "#create-network-dialog .pf-c-modal-box__body .pf-m-danger" + error_location = "#create-network-dialog .pf-v5-c-modal-box__body .pf-m-danger" b.wait_visible(error_location) error_message = b.text(error_location) self.test_obj.assertIn(self.xfail_error, error_message) else: for xfo in self.xfail_objects: - b.wait_in_text(f"#create-network-dialog .pf-c-modal-box__body #create-network-{xfo} + .pf-c-form__helper-text .pf-m-error", self.xfail_error) + b.wait_in_text(f"#create-network-dialog .pf-v5-c-modal-box__body #create-network-{xfo} + .pf-v5-c-form__helper-text .pf-m-error", self.xfail_error) self.cancel() else: @@ -222,7 +222,7 @@ class TestMachinesNetworks(VirtualMachin def verify_expected_error_on_head(self, error_message): b.click(f'#network-{self.name}-system-state button:contains("view more")') - b.wait_in_text(".pf-c-popover", error_message) + b.wait_in_text(".pf-v5-c-popover", error_message) b.click(f'#network-{self.name}-system-state button[aria-label=Close]') def verify_dialog(self): @@ -650,7 +650,7 @@ class TestMachinesNetworks(VirtualMachin b.wait_val("#vm-subVmTest1-network-1-edit-dialog-type", "bridge") b.select_from_dropdown("#vm-subVmTest1-network-1-edit-dialog-type", "network") b.wait_visible("#vm-subVmTest1-network-1-edit-dialog-save:disabled") - b.click(".pf-c-modal-box__footer button:contains(Cancel)") + b.click(".pf-v5-c-modal-box__footer button:contains(Cancel)") # Ensure that when the source of a NIC was removed we can still change it @@ -691,8 +691,8 @@ class TestMachinesNetworks(VirtualMachin self.waitPageInit() # Click on Networks card - b.wait_in_text("#card-pf-networks .pf-c-card__header button", "Network") - b.click(".pf-c-card .pf-c-card__header button:contains(Network)") + b.wait_in_text("#card-pf-networks .pf-v5-c-card__header button", "Network") + b.click(".pf-v5-c-card .pf-v5-c-card__header button:contains(Network)") # Check that all networks are there b.wait_in_text("body", "Networks") @@ -738,7 +738,7 @@ class TestMachinesNetworks(VirtualMachin self.waitPageInit() # Click on Networks card - b.click(".pf-c-card .pf-c-card__header button:contains(Network)") + b.click(".pf-v5-c-card .pf-v5-c-card__header button:contains(Network)") # Check that all networks are there b.wait_in_text("body", "Networks") @@ -777,8 +777,8 @@ class TestMachinesNetworks(VirtualMachin # Delete an inactive network b.click(f"#network-test_network2-{connectionName}-action-kebab button") b.click(f'#delete-network-test_network2-{connectionName}') - b.wait_in_text(".pf-c-modal-box__body .pf-c-description-list", "test_network2") - b.click(".pf-c-modal-box__footer button:contains(Delete)") + b.wait_in_text(".pf-v5-c-modal-box__body .pf-v5-c-description-list", "test_network2") + b.click(".pf-v5-c-modal-box__footer button:contains(Delete)") self.waitNetworkRow("test_network2", connectionName, False) # Delete an active network @@ -788,8 +788,8 @@ class TestMachinesNetworks(VirtualMachin self.toggleNetworkRow("test_network2", connectionName) b.click(f"#network-test_network2-{connectionName}-action-kebab button") b.click(f'#delete-network-test_network2-{connectionName}') - b.wait_in_text(".pf-c-modal-box__body .pf-c-description-list", "test_network2") - b.click(".pf-c-modal-box__footer button:contains(Delete)") + b.wait_in_text(".pf-v5-c-modal-box__body .pf-v5-c-description-list", "test_network2") + b.click(".pf-v5-c-modal-box__footer button:contains(Delete)") self.waitNetworkRow("test_network2", connectionName, False) def testNetworkAddStaticDCHPHosts(self): @@ -821,26 +821,26 @@ class TestMachinesNetworks(VirtualMachin def open(self): b.click(f"#network-{self.network_name}-{self.connection_name}-static-host-entries-add") b.wait_visible("#add-new-static-entry-mac-address") - b.wait_in_text(".pf-c-modal-box .pf-c-modal-box__header .pf-c-modal-box__title", "Add a DHCP static host entry") - b.wait_in_text("div.pf-c-modal-box__body label[for=add-new-static-entry-mac-address]", "MAC address") - b.wait_in_text("div.pf-c-modal-box__body label[for=add-new-static-entry-ip-address]", "IP address") + b.wait_in_text(".pf-v5-c-modal-box .pf-v5-c-modal-box__header .pf-v5-c-modal-box__title", "Add a DHCP static host entry") + b.wait_in_text("div.pf-v5-c-modal-box__body label[for=add-new-static-entry-mac-address]", "MAC address") + b.wait_in_text("div.pf-v5-c-modal-box__body label[for=add-new-static-entry-ip-address]", "IP address") def fill(self): b.set_input_text("#add-new-static-entry-mac-address", self.mac) b.set_input_text("#add-new-static-entry-ip-address", self.ip) def cancel(self): - b.click(".pf-c-modal-box__footer button:contains(Cancel)") + b.click(".pf-v5-c-modal-box__footer button:contains(Cancel)") b.wait_not_present("#add-new-static-entry") def add(self): - b.click(".pf-c-modal-box__footer button:contains(Add)") + b.click(".pf-v5-c-modal-box__footer button:contains(Add)") if self.xfail: # Check incomplete dialog for k, v in self.xfail.items(): if k == "header": - b.wait_in_text(".pf-c-modal-box .pf-c-alert.pf-m-danger", v) + b.wait_in_text(".pf-v5-c-modal-box .pf-v5-c-alert.pf-m-danger", v) break else: b.wait_in_text(k, v) @@ -869,10 +869,10 @@ class TestMachinesNetworks(VirtualMachin def cleanup(self): b.click(f"#delete-network-{self.network_name}-{self.connection_name}-ipv4-dhcp-host-{self.entry_id}-button") - b.wait_in_text(".pf-c-modal-box__body .pf-c-description-list", self.ip) + b.wait_in_text(".pf-v5-c-modal-box__body .pf-v5-c-description-list", self.ip) b.wait_in_text("#delete-resource-modal-ip", self.ip) b.wait_in_text("#delete-resource-modal-mac", self.mac) - b.click(".pf-c-modal-box__footer button:contains(Remove)") + b.click(".pf-v5-c-modal-box__footer button:contains(Remove)") b.wait_not_present(f"#network-{self.network_name}-{self.connection_name}-ipv4-dhcp-host-{self.entry_id}") b = self.browser @@ -888,7 +888,7 @@ class TestMachinesNetworks(VirtualMachin self.waitPageInit() # Click on Networks card - b.click(".pf-c-card .pf-c-card__header button:contains(Network)") + b.click(".pf-v5-c-card .pf-v5-c-card__header button:contains(Network)") # Check that all networks are there b.wait_in_text("body", "Networks") @@ -940,7 +940,7 @@ class TestMachinesNetworks(VirtualMachin # An error should be raised if "MAC address" and "IP address" is invaild b.click("#add-new-static-entry-save") b.wait_in_text( - ".pf-m-danger .pf-c-alert__description", + ".pf-m-danger .pf-v5-c-alert__description", "XML error: Cannot parse MAC address") # Attach basic static DHCP host and try to remove it Index: cockpit-machines-292/test/check-machines-nics =================================================================== --- cockpit-machines-292.orig/test/check-machines-nics +++ cockpit-machines-292/test/check-machines-nics @@ -116,7 +116,7 @@ class TestMachinesNICs(VirtualMachinesCa b._wait_present("#vm-subVmTest1-add-iface-source option:nth-of-type(2):contains(abridge)") b._wait_present("#vm-subVmTest1-add-iface-source option:nth-of-type(3):contains(virbr0)") b._wait_present("#vm-subVmTest1-add-iface-source option:nth-of-type(4):contains(xbridge)") - b.click(".pf-c-modal-box__footer button:contains(Cancel)") + b.click(".pf-v5-c-modal-box__footer button:contains(Cancel)") b.wait_not_present("#vm-subVmTest1-add-iface-dialog") def testNICPlugingAndUnpluging(self): @@ -601,7 +601,7 @@ class TestMachinesNICs(VirtualMachinesCa def open(self): self.browser.click("#vm-subVmTest1-add-iface-button") # open the Network Interfaces subtab - self.browser.wait_in_text(".pf-c-modal-box .pf-c-modal-box__header .pf-c-modal-box__title", "Add virtual network interface") + self.browser.wait_in_text(".pf-v5-c-modal-box .pf-v5-c-modal-box__header .pf-v5-c-modal-box__title", "Add virtual network interface") def fill(self): self.browser.select_from_dropdown("#vm-subVmTest1-add-iface-type", self.source_type) @@ -633,18 +633,18 @@ class TestMachinesNICs(VirtualMachinesCa self.browser.assert_pixels("#vm-subVmTest1-add-iface-dialog", self.pixel_test_tag, skip_layouts=["rtl"]) def cancel(self): - self.browser.click(".pf-c-modal-box__footer button:contains(Cancel)") + self.browser.click(".pf-v5-c-modal-box__footer button:contains(Cancel)") self.browser.wait_not_present("#vm-subVmTest1-add-iface-dialog") def create(self): - self.browser.click(".pf-c-modal-box__footer button:contains(Add)") + self.browser.click(".pf-v5-c-modal-box__footer button:contains(Add)") if not self.xfail: with self.browser.wait_timeout(60): self.browser.wait_not_present("#vm-subVmTest1-add-iface-dialog") else: - self.browser.wait_in_text(".pf-c-modal-box__body .pf-c-alert__title", self.xfail_error) - self.browser.click(".pf-c-modal-box__footer button:contains(Cancel)") + self.browser.wait_in_text(".pf-v5-c-modal-box__body .pf-v5-c-alert__title", self.xfail_error) + self.browser.click(".pf-v5-c-modal-box__footer button:contains(Cancel)") def verify(self): # Verify libvirt XML @@ -688,7 +688,7 @@ class TestMachinesNICs(VirtualMachinesCa # Check NIC is no longer in list; the device-removed signal can take *very* long to arrive with self.browser.wait_timeout(90): self.browser.wait_not_present(f"#vm-subVmTest1-network-{self.nic_num}-mac") - self.browser.wait_not_present(".pf-c-modal-box") + self.browser.wait_not_present(".pf-v5-c-modal-box") if __name__ == '__main__': Index: cockpit-machines-292/test/check-machines-settings =================================================================== --- cockpit-machines-292.orig/test/check-machines-settings +++ cockpit-machines-292/test/check-machines-settings @@ -100,7 +100,7 @@ class TestMachinesSettings(VirtualMachin # Open dialog window b.click("#vm-subVmTest1-cpu button") - b.wait_visible(".pf-c-modal-box__body") + b.wait_visible(".pf-v5-c-modal-box__body") # Check basic values b.wait_val("#machines-vcpu-count-field input", "3") @@ -120,7 +120,7 @@ class TestMachinesSettings(VirtualMachin # Open dialog b.click("#vm-subVmTest1-cpu button") - b.wait_visible(".pf-c-modal-box__body") + b.wait_visible(".pf-v5-c-modal-box__body") b.set_input_text("#machines-vcpu-count-field input", "2") @@ -148,7 +148,7 @@ class TestMachinesSettings(VirtualMachin # Open dialog b.click("#vm-subVmTest1-cpu button") - b.wait_visible(".pf-c-modal-box__body") + b.wait_visible(".pf-v5-c-modal-box__body") # Set new socket value b.wait_val("#coresSelect", "2") @@ -240,7 +240,7 @@ class TestMachinesSettings(VirtualMachin # Warning should disappear and changes should be visible in the UI b.wait_not_present("#cpu-tooltip") b.wait_not_present("#vm-subVmTest1-needs-shutdown") - b.wait_in_text("#vm-subVmTest1-cpu .pf-c-description-list__text", "host") + b.wait_in_text("#vm-subVmTest1-cpu .pf-v5-c-description-list__text", "host") # Choose manually a CPU model b.click("#vm-subVmTest1-cpu button") @@ -248,7 +248,7 @@ class TestMachinesSettings(VirtualMachin b.select_from_dropdown("#cpu-model-select-group select", "coreduo") b.click("#machines-cpu-modal-dialog-apply") b.wait_not_present("#machines-cpu-modal-dialog") - b.wait_in_text("#vm-subVmTest1-cpu .pf-c-description-list__text", "custom (coreduo)") + b.wait_in_text("#vm-subVmTest1-cpu .pf-v5-c-description-list__text", "custom (coreduo)") # Verify libvirt XML dom_xml = "virsh dumpxml subVmTest1" @@ -261,9 +261,9 @@ class TestMachinesSettings(VirtualMachin b.select_from_dropdown("#cpu-model-select-group select", "host-model") b.click("#machines-cpu-modal-dialog-apply") b.wait_not_present("#machines-cpu-modal-dialog") - b.wait_in_text("#vm-subVmTest1-cpu .pf-c-description-list__text", "host") + b.wait_in_text("#vm-subVmTest1-cpu .pf-v5-c-description-list__text", "host") b.click("#vm-subVmTest1-system-run") - b.wait_in_text("#vm-subVmTest1-cpu .pf-c-description-list__text", "custom") + b.wait_in_text("#vm-subVmTest1-cpu .pf-v5-c-description-list__text", "custom") # In the test ENV libvirt does not properly set the CPU model so we see a tooltip https://bugzilla.redhat.com/show_bug.cgi?id=1913337 # b.wait_not_present("#cpu-tooltip") @@ -310,7 +310,7 @@ class TestMachinesSettings(VirtualMachin m.execute("virsh domblklist subVmTest1 | awk 'NR==3{print $2}'").strip()) b.wait_in_text("#vm-subVmTest1-order-modal-device-row-1 .boot-order-additional-info", m.execute("virsh domiflist subVmTest1 | awk 'NR==3{print $5}'").strip()) - b.wait_visible(f".boot-order-additional-info .pf-c-description-list__description:contains('{pci_slot}')") + b.wait_visible(f".boot-order-additional-info .pf-v5-c-description-list__description:contains('{pci_slot}')") # Check a cdrom attributes are shown correctly cdrom_row = b.text(".boot-order-list-view li:nth-child(3) .boot-order-additional-info") self.assertTrue("cdrom" and "/var/lib/libvirt/images/phonycdrom" in cdrom_row) @@ -364,7 +364,7 @@ class TestMachinesSettings(VirtualMachin # re-open and check the boot option is the disk b.click("#vm-subVmTest1-boot-order button") b.wait_visible("#vm-subVmTest1-order-modal-window") - b.wait_text("#vm-subVmTest1-order-modal-device-row-0 .pf-c-description-list__description .pf-c-description-list__text", args["image"]) + b.wait_text("#vm-subVmTest1-order-modal-device-row-0 .pf-v5-c-description-list__description .pf-v5-c-description-list__text", args["image"]) b.click("#vm-subVmTest1-order-modal-cancel") b.wait_not_present("#vm-subVmTest1-order-modal-window") Index: cockpit-machines-292/test/check-machines-snapshots =================================================================== --- cockpit-machines-292.orig/test/check-machines-snapshots +++ cockpit-machines-292/test/check-machines-snapshots @@ -62,7 +62,7 @@ class TestMachinesSnapshots(VirtualMachi b.wait_not_present("#vm-subVmTest1-snapshots") return - b.wait_in_text("#vm-subVmTest1-snapshots .pf-c-empty-state", "No snapshots") + b.wait_in_text("#vm-subVmTest1-snapshots .pf-v5-c-empty-state", "No snapshots") # Check snapshot for running VM m.execute("virsh detach-disk --domain subVmTest1 --target vda --persistent") # vda is raw disk, which are not supported by internal snapshots @@ -152,7 +152,7 @@ class TestMachinesSnapshots(VirtualMachi def open(self): b.click("#vm-subVmTest1-add-snapshot-button") - b.wait_in_text(".pf-c-modal-box .pf-c-modal-box__header .pf-c-modal-box__title", "Create snapshot") + b.wait_in_text(".pf-v5-c-modal-box .pf-v5-c-modal-box__header .pf-v5-c-modal-box__title", "Create snapshot") def fill(self): if self.name: @@ -165,21 +165,21 @@ class TestMachinesSnapshots(VirtualMachi b.assert_pixels("#vm-subVmTest1-create-snapshot-modal", "create-snapshot-dialog" + ("" if not self.xfail else "-error"), skip_layouts=["rtl"]) def cancel(self): - b.click(".pf-c-modal-box__footer button:contains(Cancel)") + b.click(".pf-v5-c-modal-box__footer button:contains(Cancel)") b.wait_not_present("#vm-subVmTest1-create-snapshot-modal") def create(self): if not self.xfail: self.assert_pixels() - b.click(".pf-c-modal-box__footer button:contains(Create)") + b.click(".pf-v5-c-modal-box__footer button:contains(Create)") if not self.xfail: b.wait_not_present("#vm-subVmTest1-create-snapshot-modal") else: self.assert_pixels() b.wait_visible("#snapshot-create-dialog-name[aria-invalid=true]") - b.click(".pf-c-modal-box__footer button:contains(Cancel)") + b.click(".pf-v5-c-modal-box__footer button:contains(Cancel)") def verify_frontend(self): if self.name: @@ -211,9 +211,9 @@ class TestMachinesSnapshots(VirtualMachi def cleanup(self): b.click(f"#delete-vm-subVmTest1-snapshot-{self.snap_num}") - b.wait_in_text(".pf-c-modal-box .pf-c-modal-box__header .pf-c-modal-box__title", "Delete snapshot?") - b.wait_in_text(".pf-c-modal-box__body .pf-c-description-list", f"{self.name} will be deleted from {self.vm_name}") - b.click('.pf-c-modal-box__footer button:contains("Delete")') + b.wait_in_text(".pf-v5-c-modal-box .pf-v5-c-modal-box__header .pf-v5-c-modal-box__title", "Delete snapshot?") + b.wait_in_text(".pf-v5-c-modal-box__body .pf-v5-c-description-list", f"{self.name} will be deleted from {self.vm_name}") + b.click('.pf-v5-c-modal-box__footer button:contains("Delete")') b.wait_not_present(f"#vm-subVmTest1-snapshot-{self.snap_num}-name:contains({self.name})") # No Snapshots present @@ -283,8 +283,8 @@ class TestMachinesSnapshots(VirtualMachi self.assertEqual("no", m.execute("virsh snapshot-info --domain subVmTest1 --snapshotname snapshotB | grep 'Current:' | awk '{print $2}'").strip()) b.click("#vm-subVmTest1-snapshot-0-revert") - b.wait_in_text(".pf-c-modal-box .pf-c-modal-box__header .pf-c-modal-box__title", "Revert to snapshot snapshotB") - b.click('.pf-c-modal-box__footer button:contains("Revert")') + b.wait_in_text(".pf-v5-c-modal-box .pf-v5-c-modal-box__header .pf-v5-c-modal-box__title", "Revert to snapshot snapshotB") + b.click('.pf-v5-c-modal-box__footer button:contains("Revert")') b.wait_not_present("#vm-subVmTest1-snapshot-1-current") b.wait_visible("#vm-subVmTest1-snapshot-0-current") @@ -305,15 +305,15 @@ class TestMachinesSnapshots(VirtualMachi # libvirt will require using force options since there is a risk of memory corruption b.wait_in_text("#vm-subVmTest1-snapshot-0-name", "snapshotC") b.click("#vm-subVmTest1-snapshot-0-revert") - b.wait_in_text(".pf-c-modal-box .pf-c-modal-box__header .pf-c-modal-box__title", "Revert to snapshot snapshotC") - b.click('.pf-c-modal-box__footer button:contains("Revert")') + b.wait_in_text(".pf-v5-c-modal-box .pf-v5-c-modal-box__header .pf-v5-c-modal-box__title", "Revert to snapshot snapshotC") + b.click('.pf-v5-c-modal-box__footer button:contains("Revert")') # Check "Force revert" is present and Regular revert is disabled - b.wait_in_text(".pf-c-modal-box .pf-c-alert__description", "revert requires force") - b.wait_visible(".pf-c-modal-box__footer button:contains(Revert):disabled") - b.wait_visible(".pf-c-modal-box__footer button:contains(Force revert)") + b.wait_in_text(".pf-v5-c-modal-box .pf-v5-c-alert__description", "revert requires force") + b.wait_visible(".pf-v5-c-modal-box__footer button:contains(Revert):disabled") + b.wait_visible(".pf-v5-c-modal-box__footer button:contains(Force revert)") - b.click(".pf-c-modal-box__footer button:contains(Force revert)") - b.wait_not_present(".pf-c-modal-box") + b.click(".pf-v5-c-modal-box__footer button:contains(Force revert)") + b.wait_not_present(".pf-v5-c-modal-box") # Check VM was reverted to a correct snapshot b.wait_not_present("#vm-subVmTest1-snapshot-1-current") Index: cockpit-machines-292/test/check-machines-storage-pools =================================================================== --- cockpit-machines-292.orig/test/check-machines-storage-pools +++ cockpit-machines-292/test/check-machines-storage-pools @@ -35,12 +35,12 @@ class TestMachinesStoragePools(VirtualMa def gotoVolumesTab(self, poolName, connectionName="system"): selector = f"tr[data-row-id=pool-{poolName}-{connectionName}] + tr li:contains('Storage volumes')" self.browser.click(selector + " > button") - self.browser.wait_attr(selector, "class", "pf-c-tabs__item pf-m-current") + self.browser.wait_attr(selector, "class", "pf-v5-c-tabs__item pf-m-current") def gotoOverviewTab(self, poolName, connectionName="system"): selector = f"tr[data-row-id=pool-{poolName}-{connectionName}] + tr li:contains('Overview')" self.browser.click(selector + " > button") - self.browser.wait_attr(selector, "class", "pf-c-tabs__item pf-m-current") + self.browser.wait_attr(selector, "class", "pf-v5-c-tabs__item pf-m-current") def testStoragePoolsBasic(self): b = self.browser @@ -53,7 +53,7 @@ class TestMachinesStoragePools(VirtualMa self.waitVmRow("subVmTest1") b.wait_in_text("#card-pf-storage-pools", "1 Storage pool") - b.wait_in_text("#card-pf-storage-pools .pf-c-card__header button", "Storage pool") + b.wait_in_text("#card-pf-storage-pools .pf-v5-c-card__header button", "Storage pool") # prepare libvirt storage pools p1 = os.path.join(self.vm_tmpdir, "vm_one") @@ -88,7 +88,7 @@ class TestMachinesStoragePools(VirtualMa self.performAction("subVmTest1", "forceOff") # Click on Storage pools card - b.click(".pf-c-card .pf-c-card__header button:contains(Storage pools)") + b.click(".pf-v5-c-card .pf-v5-c-card__header button:contains(Storage pools)") # Check that all defined pools are there b.wait_in_text("body", "Storage pools") @@ -113,7 +113,7 @@ class TestMachinesStoragePools(VirtualMa # Check storage volumes of a pool self.gotoVolumesTab("myPoolOne") - b.wait_in_text(f"tr[data-row-id=pool-myPoolOne-{connectionName}] + tr .pf-c-empty-state", + b.wait_in_text(f"tr[data-row-id=pool-myPoolOne-{connectionName}] + tr .pf-v5-c-empty-state", "No storage volumes defined for this storage pool") # Close expanded row for this pool @@ -135,7 +135,7 @@ class TestMachinesStoragePools(VirtualMa b.click("tbody input[aria-label='Select row 0']") b.wait_in_text("#storage-volumes-delete", "Delete 1 volume") b.click("#storage-volumes-delete") - b.wait_in_text(".pf-c-alert .pf-c-alert__title", "Storage volumes could not be deleted") + b.wait_in_text(".pf-v5-c-alert .pf-v5-c-alert__title", "Storage volumes could not be deleted") b.reload() b.enter_page('/machines') self.togglePoolRow("myPoolTwo", connectionName) @@ -170,7 +170,7 @@ class TestMachinesStoragePools(VirtualMa # Try deactivating and activating a pool b.click(f"#deactivate-pool-myPoolOne-{connectionName}") b.wait_in_text(f"#pool-myPoolOne-{connectionName}-state", "inactive") - b.wait_in_text(f"tr[data-row-id=pool-myPoolOne-{connectionName}] + tr .pf-c-empty-state", "Activate the storage pool to administer volumes") + b.wait_in_text(f"tr[data-row-id=pool-myPoolOne-{connectionName}] + tr .pf-v5-c-empty-state", "Activate the storage pool to administer volumes") b.wait_visible(f'#myPoolOne-{connectionName}-create-volume-button:disabled') b.click(f"#activate-pool-myPoolOne-{connectionName}") b.wait_in_text(f"#pool-myPoolOne-{connectionName}-state", "active") @@ -219,8 +219,8 @@ class TestMachinesStoragePools(VirtualMa self.waitPageInit() # Click on Storage pools card - b.wait_in_text("#card-pf-storage-pools .pf-c-card__header button", "Storage pools") - b.click(".pf-c-card .pf-c-card__header button:contains(Storage pools)") + b.wait_in_text("#card-pf-storage-pools .pf-v5-c-card__header button", "Storage pools") + b.click(".pf-v5-c-card .pf-v5-c-card__header button:contains(Storage pools)") class StoragePoolCreateDialog(object): def __init__( @@ -250,7 +250,7 @@ class TestMachinesStoragePools(VirtualMa def open(self): b.click("#create-storage-pool") b.wait_visible("#create-storage-pool-dialog") - b.wait_in_text(".pf-c-modal-box .pf-c-modal-box__header .pf-c-modal-box__title", "Create storage pool") + b.wait_in_text(".pf-v5-c-modal-box .pf-v5-c-modal-box__header .pf-v5-c-modal-box__title", "Create storage pool") def fill(self): b.set_input_text("#storage-pool-dialog-name", self.name) @@ -284,11 +284,11 @@ class TestMachinesStoragePools(VirtualMa b.click("storage-pool-dialog-autostart") def cancel(self): - b.click(".pf-c-modal-box__footer button:contains(Cancel)") + b.click(".pf-v5-c-modal-box__footer button:contains(Cancel)") b.wait_not_present("#create-storage-pool-dialog") def create(self): - b.click(".pf-c-modal-box__footer button:contains(Create)") + b.click(".pf-v5-c-modal-box__footer button:contains(Create)") if not self.xfail: b.wait_not_present("#create-storage-pool-dialog") @@ -301,7 +301,7 @@ class TestMachinesStoragePools(VirtualMa b.wait_visible("#storage-pool-dialog-target-helper") # Check errors from backend if self.xfail_error: - error_location = "#create-storage-pool-dialog .pf-c-modal-box__body .pf-m-danger" + error_location = "#create-storage-pool-dialog .pf-v5-c-modal-box__body .pf-m-danger" b.wait_visible(error_location) error_message = b.text(error_location) self.test_obj.assertIn(self.xfail_error, error_message) @@ -466,10 +466,10 @@ class TestMachinesStoragePools(VirtualMa # Ensure that iscsi-direct is absent from the types dropdown b.click("#create-storage-pool") b.wait_visible("#create-storage-pool-dialog") - b.wait_in_text(".pf-c-modal-box .pf-c-modal-box__header .pf-c-modal-box__title", "Create storage pool") + b.wait_in_text(".pf-v5-c-modal-box .pf-v5-c-modal-box__header .pf-v5-c-modal-box__title", "Create storage pool") b.click("#storage-pool-dialog-type") b.wait_not_present("#storage-pool-dialog-type option[value*='isci-direct']") - b.click(".pf-c-modal-box__footer button:contains(Cancel)") + b.click(".pf-v5-c-modal-box__footer button:contains(Cancel)") b.wait_not_present("#create-storage-pool-dialog") # Prepare a Volume Group to be used as source for the LVM pool @@ -515,8 +515,8 @@ class TestMachinesStoragePools(VirtualMa self.waitPageInit() # Click on Storage pools card - b.wait_in_text("#card-pf-storage-pools .pf-c-card__header button", "Storage pools") - b.click(".pf-c-card .pf-c-card__header button:contains(Storage pools)") + b.wait_in_text("#card-pf-storage-pools .pf-v5-c-card__header button", "Storage pools") + b.click(".pf-v5-c-card .pf-v5-c-card__header button:contains(Storage pools)") class StorageVolumeCreateDialog(object): def __init__( @@ -553,7 +553,7 @@ class TestMachinesStoragePools(VirtualMa b.click(f"#{self.pool_name}-system-create-volume-button") # open the "Storage volumes" subtab b.wait_visible("#create-volume-dialog-modal") - b.wait_in_text(".pf-c-modal-box .pf-c-modal-box__header .pf-c-modal-box__title", "Create storage volume") + b.wait_in_text(".pf-v5-c-modal-box .pf-v5-c-modal-box__header .pf-v5-c-modal-box__title", "Create storage volume") def fill(self): b.set_input_text("#create-volume-dialog-name", self.vol_name) @@ -568,21 +568,21 @@ class TestMachinesStoragePools(VirtualMa b.select_from_dropdown("#create-volume-dialog-format", self.format) def cancel(self): - b.click(".pf-c-modal-box__footer button:contains(Cancel)") + b.click(".pf-v5-c-modal-box__footer button:contains(Cancel)") b.wait_not_present("#create-storage-pool-dialog") def create(self): - b.click(".pf-c-modal-box__footer button:contains(Create)") + b.click(".pf-v5-c-modal-box__footer button:contains(Create)") if not self.xfail: # Creation of volumes might take longer for some pool types if self.pool_type in ["disk", "netfs"]: - b.wait_visible(".pf-c-modal-box__footer button.pf-m-in-progress") - b.wait_visible(".pf-c-modal-box__footer button:contains(Create):disabled") + b.wait_visible(".pf-v5-c-modal-box__footer button.pf-m-in-progress") + b.wait_visible(".pf-v5-c-modal-box__footer button:contains(Create):disabled") b.wait_not_present("#create-volume-dialog-modal") else: for xfo in self.xfail_objects: - b.wait_in_text(f"#create-volume-dialog-{xfo}-group .pf-c-form__helper-text .pf-m-error", self.xfail_error) + b.wait_in_text(f"#create-volume-dialog-{xfo}-group .pf-v5-c-form__helper-text .pf-m-error", self.xfail_error) def verify(self): # Check that the defined volume is now visible @@ -741,8 +741,8 @@ class TestMachinesStoragePools(VirtualMa self.login_and_go("/machines") self.waitPageInit() - b.wait_in_text("#card-pf-storage-pools .pf-c-card__header button", "Storage pool") - b.click(".pf-c-card .pf-c-card__header button:contains(Storage pool)") + b.wait_in_text("#card-pf-storage-pools .pf-v5-c-card__header button", "Storage pool") + b.click(".pf-v5-c-card .pf-v5-c-card__header button:contains(Storage pool)") b.wait_visible("#storage-pools-listing") class StoragePoolsCreationAndDeletion: @@ -818,7 +818,7 @@ class TestMachinesStoragePools(VirtualMa b.click(f"#pool-{self.name}-{self.connection}-action-kebab button") b.click(f"#delete-pool-{self.name}-{self.connection}") # Check if deletion dialog is shown - b.wait_visible("div.pf-c-modal-box") + b.wait_visible("div.pf-v5-c-modal-box") if self.activate: if self.vol_name or self.pool_type == "iscsi": @@ -827,28 +827,28 @@ class TestMachinesStoragePools(VirtualMa else: # Check when no volume b.wait_not_present("#storage-pool-delete-volumes") - b.wait_in_text(".pf-c-modal-box__body div", + b.wait_in_text(".pf-v5-c-modal-box__body div", "No volumes exist in this storage pool.") else: # Check the content of inactive pool deletion dialog - b.wait_text(".pf-c-modal-box__body div", + b.wait_text(".pf-v5-c-modal-box__body div", "Deleting an inactive storage pool will only undefine the pool. Its content will not be deleted.") - b.click('.pf-c-modal-box__footer button:contains("Delete")') + b.click('.pf-v5-c-modal-box__footer button:contains("Delete")') if self.xfail: - b.wait_visible("div.pf-c-modal-box") + b.wait_visible("div.pf-v5-c-modal-box") if self.xfail_error: # Check the error shown on the footer of the deletion of dialog - b.wait_in_text("div.pf-c-modal-box .pf-c-alert__description", self.xfail_error) + b.wait_in_text("div.pf-v5-c-modal-box .pf-v5-c-alert__description", self.xfail_error) # Close the dialog - b.click('.pf-c-modal-box__footer button:contains("Cancel")') + b.click('.pf-v5-c-modal-box__footer button:contains("Cancel")') # Clean the pool if pool deletion is failed if self.activate: m.execute(f"virsh pool-destroy {self.name}") m.execute(f"virsh pool-undefine {self.name}") - b.wait_not_present("div.pf-c-modal-box") + b.wait_not_present("div.pf-v5-c-modal-box") def verify(self): if self.activate and self.vol_name: @@ -993,18 +993,18 @@ class TestMachinesStoragePools(VirtualMa b.click("#pool-images-system-action-kebab button") b.click("#pool-images-system-action-kebab a:contains(Delete)") b.set_checked("#storage-pool-delete-volumes", True) - b.wait_in_text(".pf-c-backdrop .pf-c-helper-text__item-text", "Pool's volumes are used by") - b.wait_visible(".pf-c-backdrop footer button[aria-disabled=true]:contains(Delete)") + b.wait_in_text(".pf-v5-c-backdrop .pf-v5-c-helper-text__item-text", "Pool's volumes are used by") + b.wait_visible(".pf-v5-c-backdrop footer button[aria-disabled=true]:contains(Delete)") # Check "Cancel" button - b.click(".pf-c-backdrop footer button:contains(Cancel)") - b.wait_not_present(".pf-c-backdrop") + b.click(".pf-v5-c-backdrop footer button:contains(Cancel)") + b.wait_not_present(".pf-v5-c-backdrop") # Check "X" button of the dialog b.click("#pool-images-system-action-kebab button") b.click("#pool-images-system-action-kebab a:contains(Delete)") - b.click(".pf-c-backdrop button[aria-label=Close]") - b.wait_not_present(".pf-c-backdrop") + b.click(".pf-v5-c-backdrop button[aria-label=Close]") + b.wait_not_present(".pf-v5-c-backdrop") # Check that the error shown after the title, not the footer # Delete the VM, or the deletion button will be disabled @@ -1015,7 +1015,7 @@ class TestMachinesStoragePools(VirtualMa b.wait_not_present("#vm-subVmTest1-system-name") # Go back to the storage pool list b.wait_in_text("#card-pf-storage-pools button", "Storage pool") - b.click("#card-pf-storage-pools .pf-c-card__header button") + b.click("#card-pf-storage-pools .pf-v5-c-card__header button") b.wait_visible("#storage-pools-listing") m.execute(f'chattr +a {args["image"]}') @@ -1023,7 +1023,7 @@ class TestMachinesStoragePools(VirtualMa b.click("#pool-images-system-action-kebab button") b.click("#pool-images-system-action-kebab a:contains(Delete)") b.set_checked("#storage-pool-delete-volumes", True) - b.click(".pf-c-backdrop footer button[aria-disabled=false]:contains(Delete)") + b.click(".pf-v5-c-backdrop footer button[aria-disabled=false]:contains(Delete)") b.assert_pixels("#storage-pool-delete-modal", "storage-pool-delete-modal-error") wait(lambda: "forDeletion" not in m.execute("ls /var/lib/libvirt/images/")) Index: cockpit-machines-292/test/check-machines-virtualization =================================================================== --- cockpit-machines-292.orig/test/check-machines-virtualization +++ cockpit-machines-292/test/check-machines-virtualization @@ -41,9 +41,9 @@ class TestMachinesVirtualization(Virtual self.login_and_go("/machines") - b.wait_visible("div.pf-c-empty-state:contains('Hardware virtualization is disabled')") + b.wait_visible("div.pf-v5-c-empty-state:contains('Hardware virtualization is disabled')") - b.assert_pixels(".pf-c-empty-state", "virtualization-disabled-warning") + b.assert_pixels(".pf-v5-c-empty-state", "virtualization-disabled-warning") b.click("#ignore-hw-virtualization-disabled-btn") @@ -51,7 +51,7 @@ class TestMachinesVirtualization(Virtual b.wait_visible("#card-pf-networks") b.wait_visible("#virtual-machines-listing") - b.wait_visible(".pf-c-page .pf-c-card__title:contains('Virtual machines')") + b.wait_visible(".pf-v5-c-page .pf-v5-c-card__title:contains('Virtual machines')") def testLibvirt(self): b = self.browser @@ -82,7 +82,7 @@ class TestMachinesVirtualization(Virtual def waitEmptyState(): with b.wait_timeout(15): - b.wait_in_text(".pf-c-empty-state", "Virtualization service (libvirt) is not active") + b.wait_in_text(".pf-v5-c-empty-state", "Virtualization service (libvirt) is not active") # Check initial state self.createVm("subVmTest1") @@ -97,7 +97,7 @@ class TestMachinesVirtualization(Virtual b.reload() b.enter_page('/machines') waitEmptyState() - b.click(".pf-c-empty-state button.pf-m-link") # Troubleshoot + b.click(".pf-v5-c-empty-state button.pf-m-link") # Troubleshoot b.leave_page() b.wait(lambda: "system/services" in b.eval_js("window.location.href")) @@ -108,7 +108,7 @@ class TestMachinesVirtualization(Virtual self.addCleanup(self.machine.execute, "pkill -u nonadmin || true; while pgrep -u nonadmin; do sleep 0.5; done") self.login_and_go("/machines", user="nonadmin", superuser=False) self.waitPageInit() - b.wait_in_text("#virtual-machines-listing .pf-c-empty-state", "No VM is running") + b.wait_in_text("#virtual-machines-listing .pf-v5-c-empty-state", "No VM is running") if __name__ == '__main__': Index: cockpit-machines-292/test/machineslib.py =================================================================== --- cockpit-machines-292.orig/test/machineslib.py +++ cockpit-machines-292/test/machineslib.py @@ -36,7 +36,7 @@ class VirtualMachinesCaseHelpers: def performAction(self, vmName, action, checkExpectedState=True, connectionName="system"): b = self.browser b.click("#vm-{0}-{1}-action-kebab button".format(vmName, connectionName)) - b.wait_visible("#vm-{0}-{1}-action-kebab > .pf-c-dropdown__menu".format(vmName, connectionName)) + b.wait_visible("#vm-{0}-{1}-action-kebab > .pf-v5-c-dropdown__menu".format(vmName, connectionName)) b.click("#vm-{0}-{1}-{2} a".format(vmName, connectionName, action)) if not checkExpectedState: @@ -68,7 +68,7 @@ class VirtualMachinesCaseHelpers: def togglePoolRow(self, poolName, connectionName="system"): isExpanded = 'pf-m-expanded' in self.browser.attr("tbody tr[data-row-id=pool-{0}-{1}] + tr".format(poolName, connectionName), "class") # click on the row header - self.browser.click("tbody tr[data-row-id=pool-{0}-{1}] .pf-c-table__toggle button".format(poolName, connectionName)) # click on the row header + self.browser.click("tbody tr[data-row-id=pool-{0}-{1}] .pf-v5-c-table__toggle button".format(poolName, connectionName)) # click on the row header if isExpanded: self.browser.wait_not_present("tbody tr[data-row-id=pool-{0}-{1}] + tr.pf-m-expanded".format(poolName, connectionName)) # click on the row header else: @@ -84,7 +84,7 @@ class VirtualMachinesCaseHelpers: def toggleNetworkRow(self, networkName, connectionName="system"): isExpanded = 'pf-m-expanded' in self.browser.attr("tbody tr[data-row-id=network-{0}-{1}] + tr".format(networkName, connectionName), "class") # click on the row header - self.browser.click("tbody tr[data-row-id=network-{0}-{1}] .pf-c-table__toggle button".format(networkName, connectionName)) # click on the row header + self.browser.click("tbody tr[data-row-id=network-{0}-{1}] .pf-v5-c-table__toggle button".format(networkName, connectionName)) # click on the row header if isExpanded: self.browser.wait_not_present("tbody tr[data-row-id=network-{0}-{1}] + tr.pf-m-expanded".format(networkName, connectionName)) # click on the row header else: @@ -219,11 +219,11 @@ class VirtualMachinesCaseHelpers: b = self.browser b.click(f"#delete-vm-subVmTest1-iface-{iface}") - b.wait_in_text(".pf-c-modal-box .pf-c-modal-box__header .pf-c-modal-box__title", "Remove network interface?") + b.wait_in_text(".pf-v5-c-modal-box .pf-v5-c-modal-box__header .pf-v5-c-modal-box__title", "Remove network interface?") if mac and vm_name: - b.wait_in_text(".pf-c-modal-box__body .pf-c-description-list", f"{mac} will be removed from {vm_name}") - b.click(".pf-c-modal-box__footer button:contains(Remove)") - b.wait_not_present(".pf-c-modal-box") + b.wait_in_text(".pf-v5-c-modal-box__body .pf-v5-c-description-list", f"{mac} will be removed from {vm_name}") + b.click(".pf-v5-c-modal-box__footer button:contains(Remove)") + b.wait_not_present(".pf-v5-c-modal-box") def get_next_mac(self, last_mac): parts = last_mac.split(':')