From patchwork Tue Sep 1 22:55:51 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Purdie X-Patchwork-Id: 96980 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 30940C61DD6 for ; Tue, 1 Sep 2026 22:56:03 +0000 (UTC) Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.44]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.215.1788303359981052371 for ; Tue, 01 Sep 2026 15:56:00 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@linuxfoundation.org header.s=google header.b=YkHiZ3qi; spf=pass (domain: linuxfoundation.org, ip: 209.85.221.44, mailfrom: richard.purdie@linuxfoundation.org) Received: by mail-wr1-f44.google.com with SMTP id ffacd0b85a97d-482f2ee53e7so265014f8f.1 for ; Tue, 01 Sep 2026 15:55:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxfoundation.org; s=google; t=1788303358; x=1788908158; darn=lists.openembedded.org; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=/F4EpwlNfbbWc8PsIDnf83GHXk96PbJHBpkqjxo69iY=; b=YkHiZ3qiss2apn8w2XK/vRL23Ch7S7U/lHjREJGS03HBppdSAGg9ToAWJkMdSqz20d d/h5cqwdxn28SWzBMAiNOaD5H9Lb4G6eJ/df7YztVlq7cn98jtvNw4d3pFyL6TveHmk4 facLPJJOU+diybhysnoh9LiN0Vpqqki3Pe/rI= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788303358; x=1788908158; h=content-transfer-encoding:mime-version:message-id:date:subject:to :from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to:content-type; bh=/F4EpwlNfbbWc8PsIDnf83GHXk96PbJHBpkqjxo69iY=; b=C25MIGwAE4yL7X4lZYK26O25NrKEuVF053NKXGTNb1d0MrG8jTJyQPCNtnlg50WLIJ IDrWyiQdKjXj/00ox6qWfh6HR1hssUkrS8VBAtTKG/PlieyNip3abzfyXs2VbB3Anxn3 GTWShRNiEkZ3tr21oXWuLrc8qNzpqlwd/XNCrdPi9lp1/qy24bWMonTHWPIINH0dfYST GaBACirgQ07mnKglxwF2OlgG7giAvikNzWK7zzX6I3SDO1XW3OsmNjSHGhJtS02eKdVz IKI2dVS1vUqhSNxYonflLKsyuOgoOrHQpjEccdxy89vkl4i0auLmzzy3GObS0i+ctM7j 0T+A== X-Gm-Message-State: AFuF++mFHTfiqcjZp5o+RVC0JCgf3UwTZYp9ScgL5KElvqtiuQrYIHzd i4VBv/I+3jii1/IXTAo1MEGZ4gnFt16tx8Ee6oyWRhX9OgS+xKWbw7AqtlvMgeBa0sTfzXkc24a mamWo4NA= X-Gm-Gg: AYBFou3gEFKDDigJBoXQ3twPih1D9pY2hynOzKHFDPJunPy3pgQh4hiEAS4kH7yMhMv ULp+fT4QTgUIX9jHH9aLzrR7Y/Ul23c4MfBvU4efEK2NsI6O/wgqKGYV/MGb+i3Qmg1WNdIAJ/L uuTKfiztKhe0khGyfn354RcjsdtuI8hWIAvav7pCgIS4wBkm3TGlBhIRlLUlIaM5JBjvPqY27jt aOK8uUz0ahSVbCaidtJ2a+XSon2xRwOdt8df/IjMGLT/nHx5wXLermeXDypXJgAcdVqMbCjV9w8 dwPGX4vhwGpktodSF01LVuhzZFC5FEeDlYJJ+a0kE2yN2MBzVslAxxsqUlDXcBUlBRUo4e7A4D9 hgXvTQ57aXOnyTsFrRZOOPZ1seckEaeXau+FzZqzKaCk4SkWRD3vAxcN6W4JihkO4xxwgxsla3g 8c2s2BTijWxTjtbVgPUmPsteeslR0hP1UI5sGz6GYRHMklqHILakGBq5vPLlw03peO5MDpYayvl o+Dys6gCMbgo87YJg== X-Received: by 2002:a05:6000:461d:b0:484:3c3a:5932 with SMTP id ffacd0b85a97d-484914bf982mr910400f8f.22.1788303358097; Tue, 01 Sep 2026 15:55:58 -0700 (PDT) Received: from max.int.rpsys.net ([2001:8b0:aba:5f3c:9e4b:8577:fa6f:4727]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48448ed37c4sm1644388f8f.21.2026.09.01.15.55.56 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 15:55:56 -0700 (PDT) From: Richard Purdie To: bitbake-devel@lists.openembedded.org Subject: [PATCH 1/5] toaster: Rename wait_until_element_clickable -> wait_under_finder_clickable Date: Tue, 1 Sep 2026 23:55:51 +0100 Message-ID: <20260901225555.2254932-1-richard.purdie@linuxfoundation.org> X-Mailer: git-send-email 2.53.0 MIME-Version: 1.0 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 01 Sep 2026 22:56:03 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/bitbake-devel/message/20140 We want a version of the function which accepts elements but we need to fix the naming of the finder variant first to stop things getting too consfusing. Signed-off-by: Richard Purdie --- .../tests/browser/selenium_helpers_base.py | 2 +- .../tests/functional/test_project_page.py | 34 +++++++++---------- .../test_project_page_tab_config.py | 2 +- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/lib/toaster/tests/browser/selenium_helpers_base.py b/lib/toaster/tests/browser/selenium_helpers_base.py index a901791aa16..ca27b3b9877 100644 --- a/lib/toaster/tests/browser/selenium_helpers_base.py +++ b/lib/toaster/tests/browser/selenium_helpers_base.py @@ -247,7 +247,7 @@ class SeleniumTestCaseBase(unittest.TestCase): Wait(self.driver, timeout=timeout).until(is_clickable, msg) return self.find(selector) - def wait_until_element_clickable(self, finder, timeout=Wait._TIMEOUT): + def wait_until_finder_clickable(self, finder, timeout=Wait._TIMEOUT): """ Wait until element is clickable """ WebDriverWait(self.driver, timeout=timeout).until(lambda driver: self.driver.execute_script("return jQuery.active == 0")) is_clickable = lambda driver: (finder(driver).is_displayed() and finder(driver).is_enabled()) diff --git a/lib/toaster/tests/functional/test_project_page.py b/lib/toaster/tests/functional/test_project_page.py index 429d86feba0..0a8aa1c7dcb 100644 --- a/lib/toaster/tests/functional/test_project_page.py +++ b/lib/toaster/tests/functional/test_project_page.py @@ -93,7 +93,7 @@ class TestProjectPageBase(SeleniumFunctionalTestCase): ): # Check edit column finder = lambda driver: self.find(f'#{edit_btn_id}') - edit_column = self.wait_until_element_clickable(finder) + edit_column = self.wait_until_finder_clickable(finder) self.assertTrue(edit_column.is_displayed()) edit_column.click() # Check dropdown is visible @@ -282,7 +282,7 @@ class TestProjectPage(TestProjectPageBase): # click on "Edit" icon button self.wait_until_visible('#project-name-container') finder = lambda driver: self.find('#project-change-form-toggle') - edit_button = self.wait_until_element_clickable(finder) + edit_button = self.wait_until_finder_clickable(finder) edit_button.click() project_name_input = self.find('#project-name-change-input') self.assertTrue(project_name_input.is_displayed()) @@ -394,7 +394,7 @@ class TestProjectPage(TestProjectPageBase): ) # check "build recipe" button works finder = lambda driver: self.find_all('#softwarerecipestable tbody tr')[0].find_element(By.XPATH, '//td[@class="add-del-layers"]/a') - build_btn = self.wait_until_element_clickable(finder) + build_btn = self.wait_until_finder_clickable(finder) build_btn.click() build_state = wait_until_build(self, 'queued cloning starting parsing failed') lastest_builds = self.driver.find_elements( @@ -405,7 +405,7 @@ class TestProjectPage(TestProjectPageBase): # Find the latest builds, the last build and then the cancel button finder = lambda driver: driver.find_elements(By.XPATH, '//div[@id="latest-builds"]/div')[0].find_element(By.XPATH, '//span[@class="cancel-build-btn pull-right alert-link"]') - cancel_button = self.wait_until_element_clickable(finder) + cancel_button = self.wait_until_finder_clickable(finder) cancel_button.click() if 'starting' not in build_state: # change build state when cancelled in starting state wait_until_build_cancelled(self) @@ -453,7 +453,7 @@ class TestProjectPage(TestProjectPageBase): ) # check "Select machine" button works finder = lambda driver: self.find_all('#machinestable tbody tr')[0].find_element(By.XPATH, '//td[@class="add-del-layers"]') - select_btn = self.wait_until_element_clickable(finder) + select_btn = self.wait_until_finder_clickable(finder) select_btn.click() self.wait_until_visible('#project-machine-name') project_machine_name = self.find('#project-machine-name') @@ -473,7 +473,7 @@ class TestProjectPage(TestProjectPageBase): self.wait_until_visible('#machinestable tbody tr') # Locate a machine to add button finder = lambda driver: self.find_all('#machinestable tbody tr')[0].find_element(By.XPATH, '//td[@class="add-del-layers"]') - add_btn = self.wait_until_element_clickable(finder) + add_btn = self.wait_until_finder_clickable(finder) add_btn.click() self.wait_until_visible('#change-notification') change_notification = self.find('#change-notification') @@ -482,7 +482,7 @@ class TestProjectPage(TestProjectPageBase): ) finder = lambda driver: self.find('#hide-alert') - hide_button = self.wait_until_element_clickable(finder) + hide_button = self.wait_until_finder_clickable(finder) hide_button.click() self.wait_until_not_visible('#change-notification') @@ -528,14 +528,14 @@ class TestProjectPage(TestProjectPageBase): # check "Add layer" button works self.wait_until_visible('#layerstable tbody tr') finder = lambda driver: self.find_all('#layerstable tbody tr')[0].find_element(By.XPATH, '//td[@class="add-del-layers"]/a[@data-directive="add"]') - add_btn = self.wait_until_element_clickable(finder) + add_btn = self.wait_until_finder_clickable(finder) add_btn.click() # check modal is displayed self.wait_until_visible('#dependencies-modal') list_dependencies = self.find_all('#dependencies-list li') # click on add-layers button finder = lambda driver: self.driver.find_element(By.XPATH, '//form[@id="dependencies-modal-form"]//button[@class="btn btn-primary"]') - add_layers_btn = self.wait_until_element_clickable(finder) + add_layers_btn = self.wait_until_finder_clickable(finder) add_layers_btn.click() self.wait_until_visible('#change-notification') change_notification = self.find('#change-notification') @@ -544,14 +544,14 @@ class TestProjectPage(TestProjectPageBase): ) finder = lambda driver: self.find('#hide-alert') - hide_button = self.wait_until_element_clickable(finder) + hide_button = self.wait_until_finder_clickable(finder) hide_button.click() self.wait_until_not_visible('#change-notification') # check "Remove layer" button works self.wait_until_visible('#layerstable tbody tr') finder = lambda driver: self.find_all('#layerstable tbody tr')[0].find_element(By.XPATH, '//td[@class="add-del-layers"]/a[@data-directive="remove"]') - remove_btn = self.wait_until_element_clickable(finder) + remove_btn = self.wait_until_finder_clickable(finder) remove_btn.click() self.wait_until_visible('#change-notification') change_notification = self.find('#change-notification') @@ -560,7 +560,7 @@ class TestProjectPage(TestProjectPageBase): ) finder = lambda driver: self.find('#hide-alert') - hide_button = self.wait_until_element_clickable(finder) + hide_button = self.wait_until_finder_clickable(finder) hide_button.click() self.wait_until_not_visible('#change-notification') @@ -606,7 +606,7 @@ class TestProjectPage(TestProjectPageBase): # check "Add distro" button works self.wait_until_visible(".add-del-layers") finder = lambda driver: self.find_all('#distrostable tbody tr')[0].find_element(By.XPATH, '//td[@class="add-del-layers"]') - add_btn = self.wait_until_element_clickable(finder) + add_btn = self.wait_until_finder_clickable(finder) add_btn.click() self.wait_until_visible('#change-notification') change_notification = self.find('#change-notification') @@ -652,7 +652,7 @@ class TestProjectPage(TestProjectPageBase): # check remove layer button works finder = lambda driver: self.find('#add-remove-layer-btn') - remove_layer_btn = self.wait_until_element_clickable(finder) + remove_layer_btn = self.wait_until_finder_clickable(finder) remove_layer_btn.click() self.wait_until_visible('#change-notification') change_notification = self.find('#change-notification') @@ -660,12 +660,12 @@ class TestProjectPage(TestProjectPageBase): f'You have removed 1 layer from your project', str(change_notification.text) ) finder = lambda driver: self.find('#hide-alert') - hide_button = self.wait_until_element_clickable(finder) + hide_button = self.wait_until_finder_clickable(finder) hide_button.click() # check add layer button works self.wait_until_not_visible('#change-notification') finder = lambda driver: self.find('#add-remove-layer-btn') - add_layer_btn = self.wait_until_element_clickable(finder) + add_layer_btn = self.wait_until_finder_clickable(finder) add_layer_btn.click() self.wait_until_visible('#change-notification') change_notification = self.find('#change-notification') @@ -673,7 +673,7 @@ class TestProjectPage(TestProjectPageBase): f'You have added 1 layer to your project', str(change_notification.text) ) finder = lambda driver: self.find('#hide-alert') - hide_button = self.wait_until_element_clickable(finder) + hide_button = self.wait_until_finder_clickable(finder) hide_button.click() self.wait_until_not_visible('#change-notification') # check tabs(layers, recipes, machines) are displayed diff --git a/lib/toaster/tests/functional/test_project_page_tab_config.py b/lib/toaster/tests/functional/test_project_page_tab_config.py index 80c53e1544a..525073ef6b0 100644 --- a/lib/toaster/tests/functional/test_project_page_tab_config.py +++ b/lib/toaster/tests/functional/test_project_page_tab_config.py @@ -330,7 +330,7 @@ class TestProjectConfigTab(TestProjectConfigTabBase): self.wait_until_visible('#layer-container > form > div > span > div') self.wait_until_visible('.dropdown-menu') finder = lambda driver: driver.find_element(By.XPATH, '//*[@id="layer-container"]/form/div/span/div/div/div') - dropdown_item = self.wait_until_element_clickable(finder) + dropdown_item = self.wait_until_finder_clickable(finder) dropdown_item.click() self.wait_until_clickable('#add-layer-btn') add_layer_btn = layers.find_element(By.ID, 'add-layer-btn') From patchwork Tue Sep 1 22:55:52 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Purdie X-Patchwork-Id: 96979 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 3FD6FC61DD3 for ; Tue, 1 Sep 2026 22:56:03 +0000 (UTC) Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.217.1788303361041677075 for ; Tue, 01 Sep 2026 15:56:01 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@linuxfoundation.org header.s=google header.b=BepRbcKf; spf=pass (domain: linuxfoundation.org, ip: 209.85.221.51, mailfrom: richard.purdie@linuxfoundation.org) Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-47f96c5b722so286812f8f.0 for ; Tue, 01 Sep 2026 15:56:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxfoundation.org; s=google; t=1788303359; x=1788908159; darn=lists.openembedded.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to:content-type; bh=hxX4agm2BuRUlLZT0afoMbx4+nUAf+dcDLHyYvZ2mZI=; b=BepRbcKf2B/pscn1BJOKQsP/lb2Zwt2h0kEjdwTpXeY7xXNqsoEXWh6tlmmfhDRvJr 298OHC/ycf6rQ5RzxaeFNZWIYe8iVwFmunJ1kW2c04clRCQ6M2Zd8jOHwZKCepZfB9sz Z8xmPhlvYGfDra+UA0kIx14+in6livXZYVMsA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788303359; x=1788908159; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to:content-type; bh=hxX4agm2BuRUlLZT0afoMbx4+nUAf+dcDLHyYvZ2mZI=; b=GdNsk7A68TPs4YQ6LTJc0FRKssHMnCOgQLnc4PbsSbxbolKyz+5r1nJimYtkfkogbl KLXkaWX7BrHqpECnrXhAJK0wFPe1ffx4YgthwdzQ4rpbb0ko4gGawnjC9N7GUV6Ez/+Z Pdkj67RKoiaPZg9UolvbTSJMcwIzD6dKYSz8LzcQzj9ZLC0ahy+nTOQOWd+ttpm0Sr7v ZuuUD/wfjk1FUm+LaDMAVy3Y07AqE3h8AsvEuIl9HVGGql6aIfkY8W0WzJUQS79pekSq uKlr7qktVjD9mYhjuBnZuFlWxUitz7TodsNw0963yHiU6ntMQCXiwdriR6yOFSgyKGLZ P//w== X-Gm-Message-State: AFuF++lirlBUdPe/8NBkkNY5azdbM2Jn4+5rCIWpAv0prHcYuN/zZWCD OqLrFRss1cPJGVWk7jKkaQKJqUaXQsixfNhMNUQcG09Is7LzL3eGEgUM14SE2ieCJ8AJmCltSNJ Q3jQpXGk= X-Gm-Gg: AYBFou3nNi7jcSnab5pHNf6Pz7Ef5vFuv4FWk9n/vBCuUbdQ3tbwkcUphdGxTabaNgr wbe3qilDp7tPPQFK/vfZ9Cr0ychhlgPfP6gmcjEBQe2RGgMdJboqO81KkkbK0TLWU3pv14aj67v Wc7tjWJQ/n4/34RAePBFxiIQhu7HFebkLyCqC4KWhaTfuTxL5MJXBaGnUq+kHGMdQsqB6IKkmiy YnrqJnX0+8gSSCSvd6wQesrdDZsBNr9QsHI0wIjdSgKq5Y/2yxOLi9JPQWynSKlz2rK9hTCIz4f w+PCpet8UVg+2hkcgz2u/BDBL735U7HowYjxXsEfMLMJdT0F9UMvpkE00+25LYPIfn1/8+D+ljp nT3CT1dsuYguBYh/lwumldEzUv5MmQ3GjChqDBBa/Rx7r7nAP1oF+yVGv2vsyYNnZO+On6ajyb3 HAuQ2pi3VPlBgQKFJrheUmUsDg8inGvgp8ZPW8w4NPYhonp8VPCZW+SJf8pGjnasohw74fnS3pX q3teLTjhZ0VI8TY6w== X-Received: by 2002:a05:6000:41d8:b0:484:3621:6341 with SMTP id ffacd0b85a97d-484913b97fbmr965915f8f.15.1788303359225; Tue, 01 Sep 2026 15:55:59 -0700 (PDT) Received: from max.int.rpsys.net ([2001:8b0:aba:5f3c:9e4b:8577:fa6f:4727]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48448ed37c4sm1644388f8f.21.2026.09.01.15.55.58 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 15:55:58 -0700 (PDT) From: Richard Purdie To: bitbake-devel@lists.openembedded.org Subject: [PATCH 2/5] toaster: Update to django 5.2 Date: Tue, 1 Sep 2026 23:55:52 +0100 Message-ID: <20260901225555.2254932-2-richard.purdie@linuxfoundation.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260901225555.2254932-1-richard.purdie@linuxfoundation.org> References: <20260901225555.2254932-1-richard.purdie@linuxfoundation.org> MIME-Version: 1.0 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 01 Sep 2026 22:56:03 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/bitbake-devel/message/20141 Run django-update against the code, which still passes testing afterwards. Signed-off-by: Richard Purdie --- lib/toaster/bldcollector/admin.py | 8 ++++---- lib/toaster/bldcontrol/admin.py | 2 +- toaster-requirements.txt | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/lib/toaster/bldcollector/admin.py b/lib/toaster/bldcollector/admin.py index feaa888c73a..e5677a2a217 100644 --- a/lib/toaster/bldcollector/admin.py +++ b/lib/toaster/bldcollector/admin.py @@ -8,6 +8,7 @@ from django import forms import django.db.models as models +@admin.register(BitbakeVersion) class BitbakeVersionAdmin(admin.ModelAdmin): # we override the formfield for db URLField @@ -20,18 +21,17 @@ class BitbakeVersionAdmin(admin.ModelAdmin): db_field, **kwargs) +@admin.register(Release) class ReleaseAdmin(admin.ModelAdmin): pass +@admin.register(ToasterSetting) class ToasterSettingAdmin(admin.ModelAdmin): pass +@admin.register(Layer_Version) class LayerVersionsAdmin(admin.ModelAdmin): pass -admin.site.register(Layer_Version, LayerVersionsAdmin) -admin.site.register(BitbakeVersion, BitbakeVersionAdmin) -admin.site.register(Release, ReleaseAdmin) -admin.site.register(ToasterSetting, ToasterSettingAdmin) diff --git a/lib/toaster/bldcontrol/admin.py b/lib/toaster/bldcontrol/admin.py index 1754bc11ccb..04dd4e164eb 100644 --- a/lib/toaster/bldcontrol/admin.py +++ b/lib/toaster/bldcontrol/admin.py @@ -5,7 +5,7 @@ from django.contrib import admin from .models import BuildEnvironment +@admin.register(BuildEnvironment) class BuildEnvironmentAdmin(admin.ModelAdmin): pass -admin.site.register(BuildEnvironment, BuildEnvironmentAdmin) diff --git a/toaster-requirements.txt b/toaster-requirements.txt index d8e48b7f3ae..6941719fc0e 100644 --- a/toaster-requirements.txt +++ b/toaster-requirements.txt @@ -1,4 +1,4 @@ -Django>4.2,<4.3 +Django>5.2,<5.3 beautifulsoup4>=4.4.0 pytz django-log-viewer==1.1.7 From patchwork Tue Sep 1 22:55:53 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Purdie X-Patchwork-Id: 96983 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 64C35C624D4 for ; Tue, 1 Sep 2026 22:56:13 +0000 (UTC) Received: from mail-wr1-f44.google.com (mail-wr1-f44.google.com [209.85.221.44]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.191.1788303363884645095 for ; Tue, 01 Sep 2026 15:56:04 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@linuxfoundation.org header.s=google header.b=VHwyVqt+; spf=pass (domain: linuxfoundation.org, ip: 209.85.221.44, mailfrom: richard.purdie@linuxfoundation.org) Received: by mail-wr1-f44.google.com with SMTP id ffacd0b85a97d-482f2ee53e7so265040f8f.1 for ; Tue, 01 Sep 2026 15:56:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxfoundation.org; s=google; t=1788303362; x=1788908162; darn=lists.openembedded.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to:content-type; bh=9+fSbuzVebk54t/sgt75seavJgrJDUkMhSgsetVVhfA=; b=VHwyVqt+ORI3meQGZ9yT3xz+3yUBf45sye/a5AsdVXQO/J0MffErMfveTD8qmikqpK v8NNZ0+M6gVCpA7+/BKE42LjtK2gTnaciu/6aaWm9iMYCnKuCqeX2HnF/bNz4WhHlHtJ 643xXkpSNroVp9JszpM+9bZTYYevwZzfA0f6Q= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788303362; x=1788908162; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to:content-type; bh=9+fSbuzVebk54t/sgt75seavJgrJDUkMhSgsetVVhfA=; b=pKdFUFJdkn+IwQqYGlkqBFXRcIgfflyztrKTuQwdTiuYj565oFR1RhX0bG8xuQX3Mv bX9cRMI00FBEZQboI44xeZBkDd7HRMRtUTf1sOLDC7947LWZv1Hvo8h7aZYt2lcm4Hep YhIaeU+WF85OCzLtMea9Xd78Gyg0w9JtqIhZwJMM2AZ3+N42jmSxB+wu8pr/KdsdR2n8 V2aWtqZ7qheMCfW+SQKH3/v2vOLaLrAu1HW2ZguREixk9wOzy5FYyxDeSg/HPoT/tKuJ jWtzZVL6r/BEc+lOeFGdcsHme3k2ZNGiR6okDXaBRtcMN7q+mvishTItcI5mVs6pQGl2 7uaA== X-Gm-Message-State: AFuF++ltUduLY/3QLpIwrmWJQEZY36FXx9NA24VNQyGzIqJ+8TR/yC1r iLJyC4mq1WsaYm8FxxYmGHNj4x3tsvrJip3TNoFQUq21URbW2044wiFA265MtNgHy2MDTB8dBSY URk2O9L8= X-Gm-Gg: AYBFou01ZXajvalKbimJg7Ssa3LQpAWN5n3H4zA2dUzsqKNmls+jZdGXznsKa75rSmb YlH94uHy8wU8KnKnQyii9v7QOyoirO0s9k11l0KEQbnQDlEXHOUTMimq1WvUvG2K05U71g1Zp4W o5hDG0oVB7pyUutmnZ72/WomR0OF4//8xCrbmOsS5+8zc/U04nMdQG/smpQrIdYcQ3NvcDpLGR5 TlKW6sbcZEQTeOTl/PUZBZZ4hDPOEAwIoUAXrk0lyEJfXpYfA3Wv4iL6wqP1nVo2UOzpOIZiXku 2tY76udKFvgR4smdvp58hutlF1p5UKT0YUri4OUNOqmuIpNqkPgqE3yi+hUu6Lj2rwAli0m0wA3 jYxjdlPNubaYT4Ju+AeAyCmjt1QTx2NW/WtDighjgXcAEH9nku91RaepFkfPbf9wB9+o1zSDATZ RQtt2S8auSSTVgvRyWWiV/9YwTmUUfqHBbDzZm6iD+Ie8Ega6hKzfwDcO1KXowCw8oDRDqUJV4h ASxhiPC2aYNnCPcnCri0a/XfQ7m X-Received: by 2002:a05:6000:2c0a:b0:482:d94e:f33b with SMTP id ffacd0b85a97d-4847b620f94mr1128640f8f.0.1788303361143; Tue, 01 Sep 2026 15:56:01 -0700 (PDT) Received: from max.int.rpsys.net ([2001:8b0:aba:5f3c:9e4b:8577:fa6f:4727]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48448ed37c4sm1644388f8f.21.2026.09.01.15.55.59 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 15:55:59 -0700 (PDT) From: Richard Purdie To: bitbake-devel@lists.openembedded.org Subject: [PATCH 3/5] toaster/layerdetails: Add id labels to for to make tests more robust Date: Tue, 1 Sep 2026 23:55:53 +0100 Message-ID: <20260901225555.2254932-3-richard.purdie@linuxfoundation.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260901225555.2254932-1-richard.purdie@linuxfoundation.org> References: <20260901225555.2254932-1-richard.purdie@linuxfoundation.org> MIME-Version: 1.0 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 01 Sep 2026 22:56:13 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/bitbake-devel/message/20142 The two textareas are hard to tell apart in the test code, add id labels to them so the tests can work more effectively/robustly. Signed-off-by: Richard Purdie --- lib/toaster/toastergui/templates/layerdetails.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/lib/toaster/toastergui/templates/layerdetails.html b/lib/toaster/toastergui/templates/layerdetails.html index 923ca3bfe4d..2f23156a12a 100644 --- a/lib/toaster/toastergui/templates/layerdetails.html +++ b/lib/toaster/toastergui/templates/layerdetails.html @@ -328,12 +328,12 @@ {{layerversion.layer.summary|default_if_none:''}}
- +
Cancel
- +
@@ -344,12 +344,12 @@ {{layerversion.layer.description|default_if_none:''}}
- +
Cancel
- + {% if layerversion.layer_source == layer_source.TYPE_LAYERINDEX %} From patchwork Tue Sep 1 22:55:54 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Purdie X-Patchwork-Id: 96982 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 45CEFC61DD6 for ; Tue, 1 Sep 2026 22:56:13 +0000 (UTC) Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) by mx.groups.io with SMTP id smtpd.msgproc02-g2.193.1788303364862702121 for ; Tue, 01 Sep 2026 15:56:05 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@linuxfoundation.org header.s=google header.b=AIpq/4Gl; spf=pass (domain: linuxfoundation.org, ip: 209.85.221.48, mailfrom: richard.purdie@linuxfoundation.org) Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-482fc3327fdso305361f8f.2 for ; Tue, 01 Sep 2026 15:56:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxfoundation.org; s=google; t=1788303363; x=1788908163; darn=lists.openembedded.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to:content-type; bh=GrwQKkGxwvLSK+Q+NfMQfa4THH1p9OQVf+jL+RY8DFo=; b=AIpq/4GlBjOXJMe2G/rn44CjfWI7ugJs1vyzRH6p7Sjaerj8wOUruZxNYTTGxIxWK/ /uhjV/LBVIWiZHv1mmgTTPR1zI56a39zTLUy8JS3AKituvKehSzQcsV9UX6KA6kLIY8X F6w6FxLthKWxTs1yijiTNNBJf7wlw89wQj/30= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788303363; x=1788908163; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to:content-type; bh=GrwQKkGxwvLSK+Q+NfMQfa4THH1p9OQVf+jL+RY8DFo=; b=IbzYaokWly19wxb5PBx7KieDaG4lsiVtaRVOuzN10vrESNERj0kjTvdVtGORUff5Qv nd97wMdQO+85TaT/56Fbm6BS11ITVsfWkOEQ6bzPtDC2GLv3x3OAZbRkUA+HAmGDKQR7 zzuozL1ykp4KpHonkuG2VJpailk3sF10ny59fLanlm9t4nu6in/dlTtj61yqan5H3mmN 7gZKblKDNTEC+VlGLSr3EIi5jv0KsgFKCLrEX/EVbB55uIliyDYijyHHHdrtt9RT98TL Lxd7CXbhbsSam7swA8jexQ7ZiZv00fbpyhetmCHWswUs1sVleWagrIIXRtfmgbc2L7ie uZnQ== X-Gm-Message-State: AFuF++kn09cziZqDdWuK29g15xp+JdjGRFOH1gHRWu57b7mtGPLNcvvS kZdcbdFFUuP9SxkOxs9lCmKUCFGjUbk+rkgEwKPUe5QssPEFyolbj3It5Lkl7jmdBSVLV0KkCJz 4XoMIV5g= X-Gm-Gg: AYBFou18iWm0sXh5sDgINvWFHleDm+gfHSkpk3WUYhqBUgclqSNb2hWKCdfM7fHxQM/ lhYGJiM8f1m9vhrEcOchb0raWhkMjGOce6dtOAQnuHonOo2VFck9XsFo2O8s7FOf5JSwLYjvaA5 gw9Beu9IHtWs40GP5HRaw5JoNmcDHUos5w+il95u+G83kjr4qPQQjBGyxTC1FZ0y/QmyegRlFpN iUav4otxKkpLxiUJZqWS8LkTZ++hBG/UXU8fNuep5vtqtM5dPIhAzE+TqmLrxMZOwn4PfW9rB+j to3tgIQT20RqUQmZsCbWuMxYKUFh94xbZVy56khkjOpLrpDr+1RbAhm/qKWEpzFbqrO1NoJCNss 9QGEg+5o24gAQkJHG/HS2vsY3D3UuOPx0u69sO6vuYjxikgnlelu6VVfMVxrLAflp7jPRTl017A qRdAaC0tIBmPtY7E0Dn3/pljtveByfvT3xWerOq82bKnk6Dnqstltniz9LpiIXslXjn/6LFTKNJ cCmf25Wd33peRJ7eu4= X-Received: by 2002:a05:6000:40cb:b0:482:e1b0:8a1a with SMTP id ffacd0b85a97d-484913b80e8mr824460f8f.15.1788303363071; Tue, 01 Sep 2026 15:56:03 -0700 (PDT) Received: from max.int.rpsys.net ([2001:8b0:aba:5f3c:9e4b:8577:fa6f:4727]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48448ed37c4sm1644388f8f.21.2026.09.01.15.56.01 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 15:56:01 -0700 (PDT) From: Richard Purdie To: bitbake-devel@lists.openembedded.org Subject: [PATCH 4/5] tests/selenium_helpers_base: Add wait_until_element_clickable Date: Tue, 1 Sep 2026 23:55:54 +0100 Message-ID: <20260901225555.2254932-4-richard.purdie@linuxfoundation.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260901225555.2254932-1-richard.purdie@linuxfoundation.org> References: <20260901225555.2254932-1-richard.purdie@linuxfoundation.org> MIME-Version: 1.0 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 01 Sep 2026 22:56:13 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/bitbake-devel/message/20143 Add a version of the wait function that works on a specific element but can also scroll to make the element clickable. To do this we need to add an optional scroll function to the core wait function, but this may be useful in other functions here eventually. Signed-off-by: Richard Purdie --- .../tests/browser/selenium_helpers_base.py | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/lib/toaster/tests/browser/selenium_helpers_base.py b/lib/toaster/tests/browser/selenium_helpers_base.py index ca27b3b9877..ce108e2fccc 100644 --- a/lib/toaster/tests/browser/selenium_helpers_base.py +++ b/lib/toaster/tests/browser/selenium_helpers_base.py @@ -27,7 +27,9 @@ from selenium.webdriver.common.by import By from selenium.webdriver.common.desired_capabilities import DesiredCapabilities from selenium.common.exceptions import NoSuchElementException, \ StaleElementReferenceException, TimeoutException, \ - SessionNotCreatedException, WebDriverException + SessionNotCreatedException, WebDriverException, \ + ElementNotInteractableException +from selenium.webdriver.common.action_chains import ActionChains def create_selenium_driver(cls,browser='chrome'): # set default browser string based on env (if available) @@ -98,7 +100,7 @@ class Wait(WebDriverWait): self._POLL_FREQUENCY = poll super(Wait, self).__init__(driver, self._TIMEOUT, self._POLL_FREQUENCY) - def until(self, method, message=''): + def until(self, method, message='', scroll=None): """ Calls the method provided with the driver as an argument until the return value is not False. @@ -107,9 +109,14 @@ class Wait(WebDriverWait): end_time = time.time() + self._timeout while True: try: + if scroll: + scroll(self._driver) value = method(self._driver) if value: return value + + except ElementNotInteractableException: + pass except NoSuchElementException: pass except StaleElementReferenceException: @@ -255,6 +262,15 @@ class SeleniumTestCaseBase(unittest.TestCase): Wait(self.driver, timeout=timeout).until(is_clickable, msg) return finder(self.driver) + def wait_until_element_clickable(self, element, timeout=Wait._TIMEOUT): + """ Wait until element is clickable """ + WebDriverWait(self.driver, timeout=timeout).until(lambda driver: self.driver.execute_script("return jQuery.active == 0")) + is_clickable = lambda driver: (element.is_displayed() and element.is_enabled()) + scroll = lambda driver: ActionChains(driver).move_to_element(element).perform() + msg = 'A matching element never became be clickable' + Wait(self.driver, timeout=timeout).until(is_clickable, msg, scroll=scroll) + return + def wait_until_focused(self, selector): """ Wait until element matching CSS selector has focus """ is_focused = \ From patchwork Tue Sep 1 22:55:55 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Purdie X-Patchwork-Id: 96981 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from aws-us-west-2-korg-lkml-1.web.codeaurora.org (localhost.localdomain [127.0.0.1]) by smtp.lore.kernel.org (Postfix) with ESMTP id 58C49C61DD3 for ; Tue, 1 Sep 2026 22:56:13 +0000 (UTC) Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.48]) by mx.groups.io with SMTP id smtpd.msgproc01-g2.220.1788303367966249849 for ; Tue, 01 Sep 2026 15:56:08 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@linuxfoundation.org header.s=google header.b=aUAOfswp; spf=pass (domain: linuxfoundation.org, ip: 209.85.221.48, mailfrom: richard.purdie@linuxfoundation.org) Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-482e257a23aso359470f8f.0 for ; Tue, 01 Sep 2026 15:56:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxfoundation.org; s=google; t=1788303366; x=1788908166; darn=lists.openembedded.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to:content-type; bh=BvJbwRp2Hcrmco6StfUAa0vPB9tuEpEQG9IqlbMpDgQ=; b=aUAOfswphy4PFT/8na26EU5ts0NltdEHGNAId/XbgEufifoTEt8C6HRClEjyGgi4iA +Kt+JZafuilIToHVhWKuns0xpL70CzlgQbTtTq5RA6O1kQ9A8dTaG6ozKsgWnq45b6He Xx2oJ1dqLP/RneKAEhn5bC5Av73ZPblYCsXhA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1788303366; x=1788908166; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to:content-type; bh=BvJbwRp2Hcrmco6StfUAa0vPB9tuEpEQG9IqlbMpDgQ=; b=S6Z0AWw3wvpSAg33wU2rI+vdcGqkAJtL0FCEd5Yo5yFRpqyOSlHCELTGhXlAP8shMc cKn70Zl3ISeDmqTUo2745I2gZLXkvaOIjM50vMU/bgOiMMozt+dvBUuj8xPS7n0PSTkV El5wzFcM3FyV38KxZdp3uG7U2ZFMx0KbxwTTFsphUCenPeBzyKNdH8TQm5InVldMwtDh WunKWlnI+BDsflgtM4VCdUMZ7T5MRXTU89CKDOMbKW196b39ztZ+IRxYbJbcoyGbUQLV A09BocCQj1VSxOuCgeVnuz5PNayax/ZaGh7FRHkQKjIcfBiz1m/0sg9KUI9hxKdtTfzt LHOA== X-Gm-Message-State: AFuF++nMkZrViEuncbszPb1vipVfX1QzQ2rHkg/wqeDXscIywOet8GV2 IqpBf3QBRsIx8fnzmZuvbGDY9np4V0GP+6YSlhoAghgiKJLoZxbN/gZDieXq4Brnjx82EUBToyM Y5ZJdmH4= X-Gm-Gg: AYBFou2StJEoDVZLGyFsFLW0NfiqsBsen+YsJy7pHtgkWXx2fQQLV+CsBz33XfdjOuq EMNGZkdXZPmuOFL7iWNfio7K3J/oRd3GMqzrvmbGGqTtpb8snd8slCUqIHnKpU/Wdlt9nSoL8go rE/pWX2XBDX8MtVO24JTRuVP1M0/rs+AMiW72M5ymh/zW32JrPIxIg7ozmVZCXYmknbOb/8iwEo OyQEZdZknTGgzZmG1TQPaSy6nY67RZQHHYaf39A/IM9N6BTBcWEQPciEpRFEmWnH0npV9DNLkEd StiK023/dIO0EPLrbPEC6sLbssXJ+6hgl2ZrhS/qgjJw/fgwh4d69juRWh09FODpgfSlOBJui5K c+s+ROCMG3lBdiT2IS8T/sMK6CyGJGwTOX1nCpMZ3s6T3zIYqPZymssWu+QTSOCjVeSlsncfyGG 4T/A6HLv+P64yS8bpVDgJDxmblbY78k2Ys9nB0BaMylOhEDYLVDDi7MXvkHbfrriPGnTaQp6u+R 84buLM9jlLKGTLMi1Y= X-Received: by 2002:a05:6000:420b:b0:45e:e1a4:c4c3 with SMTP id ffacd0b85a97d-48488f20a4cmr807463f8f.15.1788303366111; Tue, 01 Sep 2026 15:56:06 -0700 (PDT) Received: from max.int.rpsys.net ([2001:8b0:aba:5f3c:9e4b:8577:fa6f:4727]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-48448ed37c4sm1644388f8f.21.2026.09.01.15.56.03 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 01 Sep 2026 15:56:04 -0700 (PDT) From: Richard Purdie To: bitbake-devel@lists.openembedded.org Subject: [PATCH 5/5] toaster/tests/layerdetails: Update tests to use labels and scrolling function Date: Tue, 1 Sep 2026 23:55:55 +0100 Message-ID: <20260901225555.2254932-5-richard.purdie@linuxfoundation.org> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260901225555.2254932-1-richard.purdie@linuxfoundation.org> References: <20260901225555.2254932-1-richard.purdie@linuxfoundation.org> MIME-Version: 1.0 List-Id: X-Webhook-Received: from 45-33-107-173.ip.linodeusercontent.com [45.33.107.173] by aws-us-west-2-korg-lkml-1.web.codeaurora.org with HTTPS for ; Tue, 01 Sep 2026 22:56:13 -0000 X-Groupsio-URL: https://lists.openembedded.org/g/bitbake-devel/message/20144 wait_until_element_clickable attempts to scroll the viewport if needed which improves the test robustness from timing issues. Also switch to dedicated element labels added in a previous patch to remove ambiguity from the test over the different textareas so we don't randonly iterate them (which caused some test issues). Signed-off-by: Richard Purdie --- .../tests/browser/test_layerdetails_page.py | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/lib/toaster/tests/browser/test_layerdetails_page.py b/lib/toaster/tests/browser/test_layerdetails_page.py index 0b45ca6e0f1..476a8fa522c 100644 --- a/lib/toaster/tests/browser/test_layerdetails_page.py +++ b/lib/toaster/tests/browser/test_layerdetails_page.py @@ -78,17 +78,20 @@ class TestLayerDetailsPage(SeleniumTestCase): self.wait_until_visible("#layer-git-repo-url") # Open every edit box - for btn in self.find_all("dd .glyphicon-edit"): - btn.click() + self.wait_until_element_clickable(self.find("#edit-layer-description")) + self.click("#edit-layer-description") + self.wait_until_element_clickable(self.find("#edit-layer-summary")) + self.click("#edit-layer-summary") # Wait for the inputs to become visible after animation - self.wait_until_visible("#layer-git input[type=text]") - self.wait_until_visible("dd textarea") + self.wait_until_visible("#layer-git-repo-url") self.wait_until_visible("dd .change-btn") + self.wait_until_element_clickable(self.find("#layer-description")) + self.wait_until_element_clickable(self.find("#layer-summary")) # Edit each value for inputs in self.find_all("#layer-git input[type=text]") + \ - self.find_all("dd textarea"): + [self.find("#layer-summary"), self.find("#layer-description")]: # ignore the tt inputs (twitter typeahead input) if "tt-" in inputs.get_attribute("class"): continue @@ -100,7 +103,7 @@ class TestLayerDetailsPage(SeleniumTestCase): (self.initial_values, value)) # Make sure the input visible beofre sending keys - self.wait_until_element_visible(inputs) + self.wait_until_element_clickable(inputs) inputs.send_keys("-edited") # Save the new values