diff --git a/.github/workflows/feature_test.yml b/.github/workflows/feature_test.yml
index 001f4b9faf..0c5c7f685d 100644
--- a/.github/workflows/feature_test.yml
+++ b/.github/workflows/feature_test.yml
@@ -30,7 +30,7 @@ jobs:
- name: Set up uv
uses: SFDO-Tooling/setup-uv@main
with:
- version: "0.5.0"
+ version: "0.6.1"
enable-cache: true
- name: Install dependencies
run: uv sync --group docs
@@ -56,7 +56,7 @@ jobs:
- name: Set up uv
uses: SFDO-Tooling/setup-uv@main
with:
- version: "0.5.0"
+ version: "0.6.1"
enable-cache: true
- name: Install dependencies
run: uv sync -p ${{ matrix.python-version }}
@@ -80,7 +80,7 @@ jobs:
- name: Set up uv
uses: SFDO-Tooling/setup-uv@main
with:
- version: "0.5.0"
+ version: "0.6.1"
enable-cache: true
- name: Install dependencies
run: uv sync --all-extras -p ${{ matrix.python-version }}
@@ -99,7 +99,7 @@ jobs:
- name: Set up uv
uses: SFDO-Tooling/setup-uv@main
with:
- version: "0.5.0"
+ version: "0.6.1"
enable-cache: true
- name: Install dependencies
run: uv sync -p 3.11
diff --git a/.github/workflows/release_test_sfdx.yml b/.github/workflows/release_test_sfdx.yml
index 911932654a..12ba7a4335 100644
--- a/.github/workflows/release_test_sfdx.yml
+++ b/.github/workflows/release_test_sfdx.yml
@@ -48,7 +48,7 @@ jobs:
- name: Set up uv
uses: SFDO-Tooling/setup-uv@main
with:
- version: "0.5.0"
+ version: "0.6.1"
enable-cache: true
- name: Install Python dependencies
run: uv sync
diff --git a/.github/workflows/slow_integration_tests.yml b/.github/workflows/slow_integration_tests.yml
index 73c27c5767..79ae3d0a87 100644
--- a/.github/workflows/slow_integration_tests.yml
+++ b/.github/workflows/slow_integration_tests.yml
@@ -34,7 +34,7 @@ jobs:
- name: Set up uv
uses: SFDO-Tooling/setup-uv@main
with:
- version: "0.5.0"
+ version: "0.6.1"
enable-cache: true
- name: Install dependencies
run: uv sync -p 3.11
diff --git a/cumulusci/robotframework/Salesforce.py b/cumulusci/robotframework/Salesforce.py
index 99eebdb0d0..8fb3332e6a 100644
--- a/cumulusci/robotframework/Salesforce.py
+++ b/cumulusci/robotframework/Salesforce.py
@@ -12,9 +12,11 @@
StaleElementReferenceException,
WebDriverException,
)
+from selenium.webdriver.common.by import By
from selenium.webdriver.common.action_chains import ActionChains
from selenium.webdriver.common.keys import Keys
from SeleniumLibrary.errors import ElementNotFound, NoOpenBrowser
+from selenium.webdriver.common.by import By
from urllib3.exceptions import ProtocolError
from cumulusci.robotframework import locator_manager
@@ -607,7 +609,7 @@ def select_app_launcher_app(self, app_name, timeout=30):
self.selenium.wait_until_page_contains_element(locator, timeout)
self.selenium.set_focus_to_element(locator)
elem = self.selenium.get_webelement(locator)
- link = elem.find_element_by_xpath("../../..")
+ link = elem.find_element(By.XPATH, "../../..")
self.selenium.set_focus_to_element(link)
link.click()
self.wait_until_modal_is_closed()
@@ -892,7 +894,8 @@ def _locate_element_by_label(self, browser, locator, tag, constraints):
fieldset_prefix
+ f'//label[descendant-or-self::*[text()[normalize-space() = "{label}"]]]'
)
- labels = browser.find_elements_by_xpath(label_xpath)
+ labels = browser.find_elements(By.XPATH, label_xpath)
+
if not labels:
return []
@@ -906,13 +909,11 @@ def _locate_element_by_label(self, browser, locator, tag, constraints):
# probably never be. Famous last words, right?
orig_wait = self.selenium.set_selenium_implicit_wait(0)
component = None
- component = label_element.find_element_by_xpath(
- "./ancestor::*[starts-with(local-name(), 'lightning-')][1]"
- )
+ component = label_element.find_element(By.XPATH, "./ancestor::*[starts-with(local-name(), 'lightning-')][1]")
except NoSuchElementException:
component_id = label_element.get_attribute("for")
if component_id:
- component = browser.find_element_by_id(component_id)
+ component = browser.find_element(By.ID, component_id)
# else find an input or textarea in a sibling or descendant?
finally:
self.selenium.set_selenium_implicit_wait(orig_wait)
diff --git a/cumulusci/robotframework/Salesforce.robot b/cumulusci/robotframework/Salesforce.robot
index 1b8e9275f4..e965f86743 100644
--- a/cumulusci/robotframework/Salesforce.robot
+++ b/cumulusci/robotframework/Salesforce.robot
@@ -186,7 +186,7 @@ Chrome Set Headless
... This keyword is not intended to be used by test scripts
[Arguments] ${options}
- Call Method ${options} set_headless ${true}
+ Call Method ${options} add_argument --headless
Call Method ${options} add_argument --disable-dev-shm-usage
Call Method ${options} add_argument --disable-background-timer-throttling
[return] ${options}
diff --git a/cumulusci/robotframework/form_handlers.py b/cumulusci/robotframework/form_handlers.py
index bc79749057..baad468077 100644
--- a/cumulusci/robotframework/form_handlers.py
+++ b/cumulusci/robotframework/form_handlers.py
@@ -2,6 +2,7 @@
from robot.libraries.BuiltIn import BuiltIn
from selenium.common.exceptions import TimeoutException
+from selenium.webdriver.common.by import By
from cumulusci.utils.classutils import get_all_subclasses
@@ -61,9 +62,7 @@ def selenium(self):
@property
def input_element(self):
"""Returns the first or