diff --git a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateOrderBackendTest.xml b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateOrderBackendTest.xml
index 8ffcab68cdc62..acf15c0e28252 100644
--- a/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateOrderBackendTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Braintree/Test/TestCase/CreateOrderBackendTest.xml
@@ -27,8 +27,8 @@
braintree
braintree
Processing
- Back, Cancel, Send Email, Hold, Invoice, Ship, Reorder, Edit
-
+ Back, Cancel, Send Email, Invoice, Reorder, Edit
+
@@ -55,9 +55,9 @@
visa_default
braintree
braintree, braintree_sale
- Processing
- Back, Send Email, Hold, Ship, Reorder
-
+ Complete
+ Back, Send Email, Reorder
+
@@ -83,7 +83,7 @@
visa_braintree_fraud_rejected
braintree
Processing
-
+
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Actions.php b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Actions.php
index 573f28f09b78c..7a6903ef47aac 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Actions.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/Block/Adminhtml/Order/Actions.php
@@ -137,6 +137,16 @@ class Actions extends Block
*/
protected $confirmModal = '.confirm._show[data-role=modal]';
+ /**
+ * Is shipment can be created.
+ *
+ * @return bool
+ */
+ public function canShip()
+ {
+ return $this->_rootElement->find($this->ship)->isVisible();
+ }
+
/**
* Ship order.
*
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CreateOrderBackendTest.xml b/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CreateOrderBackendTest.xml
index 439b8a4492a1a..c4e03b94d2ada 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CreateOrderBackendTest.xml
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/TestCase/CreateOrderBackendTest.xml
@@ -19,7 +19,7 @@
cashondelivery
cashondelivery
-
+
@@ -35,7 +35,7 @@
cashondelivery
cashondelivery
-
+
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/TestStep/CreateShipmentStep.php b/dev/tests/functional/tests/app/Magento/Sales/Test/TestStep/CreateShipmentStep.php
index 79abd438a1f2e..dcee66b44646e 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/TestStep/CreateShipmentStep.php
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/TestStep/CreateShipmentStep.php
@@ -99,13 +99,21 @@ public function run()
{
$this->orderIndex->open();
$this->orderIndex->getSalesOrderGrid()->searchAndOpen(['id' => $this->order->getId()]);
- $this->salesOrderView->getPageActions()->ship();
- if (!empty($this->data)) {
- $this->orderShipmentNew->getFormBlock()->fillData($this->data, $this->order->getEntityId()['products']);
+ $shipmentIds = [];
+ /**
+ * As this step is used in general scenarios and not all test cases has shippable items(ex: virtual product)
+ * we need to check, if it possible to create shipment for given order.
+ */
+ if ($this->salesOrderView->getPageActions()->canShip()) {
+ $this->salesOrderView->getPageActions()->ship();
+ if (!empty($this->data)) {
+ $this->orderShipmentNew->getFormBlock()->fillData($this->data, $this->order->getEntityId()['products']);
+ }
+ $this->orderShipmentNew->getFormBlock()->submit();
+ $shipmentIds = $this->getShipmentIds();
}
- $this->orderShipmentNew->getFormBlock()->submit();
- return ['shipmentIds' => $this->getShipmentIds()];
+ return ['shipmentIds' => $shipmentIds];
}
/**
diff --git a/dev/tests/functional/tests/app/Magento/Sales/Test/etc/testcase.xml b/dev/tests/functional/tests/app/Magento/Sales/Test/etc/testcase.xml
index c7c4a2276e4b7..28b7e3a69f67e 100644
--- a/dev/tests/functional/tests/app/Magento/Sales/Test/etc/testcase.xml
+++ b/dev/tests/functional/tests/app/Magento/Sales/Test/etc/testcase.xml
@@ -36,7 +36,8 @@
-
+
+