shiplightai 0.1.71 → 0.1.73
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/debugger-manager.cjs +7 -7
- package/dist/cjs/debugger-pw.cjs +84 -83
- package/dist/cjs/fixture.cjs +46 -46
- package/dist/cjs/index.cjs +63 -63
- package/dist/cjs/reporter.cjs +35 -35
- package/dist/cli.js +93 -93
- package/dist/debugger-manager.js +9 -9
- package/dist/debugger-pw.js +85 -84
- package/dist/fixture.d.ts +24 -1
- package/dist/fixture.js +55 -55
- package/dist/index.js +90 -90
- package/dist/reporter.js +33 -33
- package/dist/static/assets/{index-BQYw0-8-.js → index-CsPWUDqs.js} +221 -23
- package/dist/static/index.html +1 -1
- package/dist/static-embedded/assets/{index-Bosp2pQJ.js → index-BEW7CdFm.js} +51 -162
- package/dist/static-embedded/assets/{index-Eah7879k.js → index-CoKedfWS.js} +2 -2
- package/dist/static-embedded/index.html +1 -1
- package/package.json +3 -3
|
@@ -8668,9 +8668,9 @@ function createUseExternalEvents(prefix) {
|
|
|
8668
8668
|
}
|
|
8669
8669
|
return [_useExternalEvents, createEvent2];
|
|
8670
8670
|
}
|
|
8671
|
-
var define_process_env_default$
|
|
8671
|
+
var define_process_env_default$1 = {};
|
|
8672
8672
|
function getEnv() {
|
|
8673
|
-
if (typeof process !== "undefined" && define_process_env_default$
|
|
8673
|
+
if (typeof process !== "undefined" && define_process_env_default$1 && "production") {
|
|
8674
8674
|
return "production";
|
|
8675
8675
|
}
|
|
8676
8676
|
return "development";
|
|
@@ -41603,7 +41603,7 @@ var AgentStatus = /* @__PURE__ */ ((AgentStatus2) => {
|
|
|
41603
41603
|
AgentStatus2["FAILED"] = "failed";
|
|
41604
41604
|
return AgentStatus2;
|
|
41605
41605
|
})(AgentStatus || {});
|
|
41606
|
-
var define_process_env_default
|
|
41606
|
+
var define_process_env_default = {};
|
|
41607
41607
|
var TestStepActionType = /* @__PURE__ */ ((TestStepActionType2) => {
|
|
41608
41608
|
TestStepActionType2["Action"] = "Action";
|
|
41609
41609
|
TestStepActionType2["Assertion"] = "Assertion";
|
|
@@ -41624,7 +41624,7 @@ var TestFunctionStatus = /* @__PURE__ */ ((TestFunctionStatus2) => {
|
|
|
41624
41624
|
TestFunctionStatus2["Active"] = "Active";
|
|
41625
41625
|
return TestFunctionStatus2;
|
|
41626
41626
|
})(TestFunctionStatus || {});
|
|
41627
|
-
const S3_BUCKET_SUFFIX = define_process_env_default
|
|
41627
|
+
const S3_BUCKET_SUFFIX = define_process_env_default.S3_BUCKET_SUFFIX || "";
|
|
41628
41628
|
const INT_RUN_ARTIFACTS_BUCKET = `loggia-int-runs${S3_BUCKET_SUFFIX}`;
|
|
41629
41629
|
const STORAGE_STATE_BUCKET = `loggia-storage-states${S3_BUCKET_SUFFIX}`;
|
|
41630
41630
|
var AgentStepEventTypes = /* @__PURE__ */ ((AgentStepEventTypes2) => {
|
|
@@ -48013,6 +48013,8 @@ const useEditor = () => {
|
|
|
48013
48013
|
const FloatingActionBar = ({
|
|
48014
48014
|
onPlay,
|
|
48015
48015
|
onPlayUntil,
|
|
48016
|
+
onSkipToStatement,
|
|
48017
|
+
onRollBackToStatement,
|
|
48016
48018
|
onMoveUp,
|
|
48017
48019
|
onMoveDown,
|
|
48018
48020
|
onDuplicate,
|
|
@@ -48025,7 +48027,7 @@ const FloatingActionBar = ({
|
|
|
48025
48027
|
visible: visible2
|
|
48026
48028
|
}) => {
|
|
48027
48029
|
const t2 = n("TestCases.floatingActionBar");
|
|
48028
|
-
const hasDebugActions = onPlay || onPlayUntil;
|
|
48030
|
+
const hasDebugActions = onPlay || onPlayUntil || onSkipToStatement || onRollBackToStatement;
|
|
48029
48031
|
const hasMenu = menuGroups && menuGroups.some((g) => g.actions.length > 0);
|
|
48030
48032
|
const hasEditActions = onMoveUp || onMoveDown || onDuplicate || onEdit || onDelete || hasMenu || extraActions;
|
|
48031
48033
|
return /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
@@ -48064,6 +48066,28 @@ const FloatingActionBar = ({
|
|
|
48064
48066
|
children: /* @__PURE__ */ jsxRuntimeExports.jsx(IconPlayerSkipForward, { size: 14, className: "text-white" })
|
|
48065
48067
|
}
|
|
48066
48068
|
) }),
|
|
48069
|
+
onRollBackToStatement && /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip, { label: t2("rollback"), position: "top", withArrow: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
48070
|
+
"button",
|
|
48071
|
+
{
|
|
48072
|
+
onClick: (e) => {
|
|
48073
|
+
e.stopPropagation();
|
|
48074
|
+
onRollBackToStatement();
|
|
48075
|
+
},
|
|
48076
|
+
className: "p-1 rounded-full hover:bg-white/15 transition-colors",
|
|
48077
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(IconCornerDownLeftDouble, { size: 14, className: "text-white" })
|
|
48078
|
+
}
|
|
48079
|
+
) }),
|
|
48080
|
+
onSkipToStatement && /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip, { label: t2("skipTo"), position: "top", withArrow: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
48081
|
+
"button",
|
|
48082
|
+
{
|
|
48083
|
+
onClick: (e) => {
|
|
48084
|
+
e.stopPropagation();
|
|
48085
|
+
onSkipToStatement();
|
|
48086
|
+
},
|
|
48087
|
+
className: "p-1 rounded-full hover:bg-white/15 transition-colors",
|
|
48088
|
+
children: /* @__PURE__ */ jsxRuntimeExports.jsx(IconCornerUpRightDouble, { size: 14, className: "text-white" })
|
|
48089
|
+
}
|
|
48090
|
+
) }),
|
|
48067
48091
|
hasDebugActions && hasEditActions && /* @__PURE__ */ jsxRuntimeExports.jsx("div", { className: "w-px h-4 bg-white/25 mx-0.5" }),
|
|
48068
48092
|
onMoveUp && /* @__PURE__ */ jsxRuntimeExports.jsx(Tooltip, { label: t2("moveUp"), position: "top", withArrow: true, children: /* @__PURE__ */ jsxRuntimeExports.jsx(
|
|
48069
48093
|
"button",
|
|
@@ -48939,6 +48963,8 @@ function StatementWrapper({
|
|
|
48939
48963
|
{
|
|
48940
48964
|
onPlay: onPlay && isCurrentStatement && !disabled ? onPlay : void 0,
|
|
48941
48965
|
onPlayUntil: onPlayUntil && !isCurrentStatement && debugStatus !== "skipped" && debugStatus !== "success" && debugStatus !== "failed" && !disabled ? onPlayUntil : void 0,
|
|
48966
|
+
onSkipToStatement: onSkipToStatement && !isCurrentStatement && debugStatus !== "skipped" && debugStatus !== "success" && !disabled ? () => onSkipToStatement(statement.uid) : void 0,
|
|
48967
|
+
onRollBackToStatement: onRollBackToStatement && !isCurrentStatement && debugStatus !== "pending" && !disabled ? () => onRollBackToStatement(statement.uid) : void 0,
|
|
48942
48968
|
onMoveUp,
|
|
48943
48969
|
onMoveDown,
|
|
48944
48970
|
onDuplicate,
|
|
@@ -187956,7 +187982,7 @@ function dynamic(importFn, _options) {
|
|
|
187956
187982
|
);
|
|
187957
187983
|
return Wrapper;
|
|
187958
187984
|
}
|
|
187959
|
-
const MonacoEditor = dynamic(() => __vitePreload(() => import("./index-
|
|
187985
|
+
const MonacoEditor = dynamic(() => __vitePreload(() => import("./index-CoKedfWS.js"), true ? [] : void 0), {});
|
|
187960
187986
|
const CodeEditor = ({
|
|
187961
187987
|
initialCode = "",
|
|
187962
187988
|
onConfirm,
|
|
@@ -198590,155 +198616,22 @@ const ImageDataViewer = ({
|
|
|
198590
198616
|
}
|
|
198591
198617
|
) });
|
|
198592
198618
|
};
|
|
198593
|
-
var define_process_env_default = {};
|
|
198594
|
-
const DEFAULT_INT_RUNNER_OPTIONS = {
|
|
198595
|
-
maxRetries: 5,
|
|
198596
|
-
// More retries for long-running operations
|
|
198597
|
-
initialDelayMs: 2e3,
|
|
198598
|
-
// Start with 2 seconds
|
|
198599
|
-
maxDelayMs: 6e4,
|
|
198600
|
-
// Max 1 minute between retries
|
|
198601
|
-
backoffMultiplier: 2,
|
|
198602
|
-
shouldRetry: (error) => {
|
|
198603
|
-
var _a;
|
|
198604
|
-
if (error.name === "TypeError" && ((_a = error.message) == null ? void 0 : _a.toLowerCase().includes("fetch"))) {
|
|
198605
|
-
return true;
|
|
198606
|
-
}
|
|
198607
|
-
if (error.code) {
|
|
198608
|
-
const networkErrorCodes = [
|
|
198609
|
-
"ECONNRESET",
|
|
198610
|
-
// Connection reset
|
|
198611
|
-
"ETIMEDOUT",
|
|
198612
|
-
// Connection timed out
|
|
198613
|
-
"ENOTFOUND",
|
|
198614
|
-
// DNS lookup failed
|
|
198615
|
-
"ECONNREFUSED",
|
|
198616
|
-
// Connection refused
|
|
198617
|
-
"EPIPE",
|
|
198618
|
-
// Broken pipe
|
|
198619
|
-
"EHOSTUNREACH",
|
|
198620
|
-
// Host unreachable
|
|
198621
|
-
"ENETUNREACH",
|
|
198622
|
-
// Network unreachable
|
|
198623
|
-
"ECONNABORTED"
|
|
198624
|
-
// Connection aborted
|
|
198625
|
-
];
|
|
198626
|
-
if (networkErrorCodes.includes(error.code)) {
|
|
198627
|
-
return true;
|
|
198628
|
-
}
|
|
198629
|
-
}
|
|
198630
|
-
if (error.message) {
|
|
198631
|
-
const message = error.message.toLowerCase();
|
|
198632
|
-
const networkPatterns = [
|
|
198633
|
-
/network\s*(error|fail|unreachable)/i,
|
|
198634
|
-
/fetch\s*failed/i,
|
|
198635
|
-
/connection\s*(reset|refused|abort|timeout)/i,
|
|
198636
|
-
/socket\s*(hang\s*up|timeout)/i,
|
|
198637
|
-
/econnreset/i,
|
|
198638
|
-
/etimedout/i,
|
|
198639
|
-
/dns\s*(lookup|fail)/i
|
|
198640
|
-
];
|
|
198641
|
-
if (networkPatterns.some((pattern) => pattern.test(message))) {
|
|
198642
|
-
return true;
|
|
198643
|
-
}
|
|
198644
|
-
}
|
|
198645
|
-
return false;
|
|
198646
|
-
},
|
|
198647
|
-
onRetry: (error, attemptNumber, nextDelayMs) => {
|
|
198648
|
-
console.log(
|
|
198649
|
-
`[Int-Runner] Retry attempt ${attemptNumber} after ${nextDelayMs}ms due to:`,
|
|
198650
|
-
error.message || error
|
|
198651
|
-
);
|
|
198652
|
-
}
|
|
198653
|
-
};
|
|
198654
|
-
function sleep(ms) {
|
|
198655
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
198656
|
-
}
|
|
198657
|
-
function calculateDelay(attemptNumber, initialDelayMs, maxDelayMs, backoffMultiplier) {
|
|
198658
|
-
const exponentialDelay = initialDelayMs * Math.pow(backoffMultiplier, attemptNumber - 1);
|
|
198659
|
-
const cappedDelay = Math.min(exponentialDelay, maxDelayMs);
|
|
198660
|
-
const jitter = cappedDelay * 0.25 * (Math.random() * 2 - 1);
|
|
198661
|
-
return Math.round(cappedDelay + jitter);
|
|
198662
|
-
}
|
|
198663
|
-
async function retryIntRunnerRequest(fetchFn, options = {}) {
|
|
198664
|
-
const opts = { ...DEFAULT_INT_RUNNER_OPTIONS, ...options };
|
|
198665
|
-
let lastError;
|
|
198666
|
-
for (let attempt = 1; attempt <= opts.maxRetries + 1; attempt++) {
|
|
198667
|
-
try {
|
|
198668
|
-
const result = await fetchFn();
|
|
198669
|
-
if (result && typeof result === "object" && "ok" in result && "status" in result) {
|
|
198670
|
-
const response = result;
|
|
198671
|
-
if (!response.ok && opts.shouldRetry({ status: response.status }, attempt)) {
|
|
198672
|
-
throw { status: response.status, message: `HTTP ${response.status}` };
|
|
198673
|
-
}
|
|
198674
|
-
}
|
|
198675
|
-
return result;
|
|
198676
|
-
} catch (error) {
|
|
198677
|
-
lastError = error;
|
|
198678
|
-
if (attempt > opts.maxRetries || !opts.shouldRetry(error, attempt)) {
|
|
198679
|
-
throw error;
|
|
198680
|
-
}
|
|
198681
|
-
const delayMs = calculateDelay(
|
|
198682
|
-
attempt,
|
|
198683
|
-
opts.initialDelayMs,
|
|
198684
|
-
opts.maxDelayMs,
|
|
198685
|
-
opts.backoffMultiplier
|
|
198686
|
-
);
|
|
198687
|
-
opts.onRetry(error, attempt, delayMs);
|
|
198688
|
-
await sleep(delayMs);
|
|
198689
|
-
}
|
|
198690
|
-
}
|
|
198691
|
-
throw lastError;
|
|
198692
|
-
}
|
|
198693
|
-
function isIntRunnerRetryDisabled() {
|
|
198694
|
-
return define_process_env_default.NEXT_PUBLIC_DISABLE_INT_RUNNER_RETRY === "true";
|
|
198695
|
-
}
|
|
198696
|
-
async function withIntRunnerRetry(fetchFn, options) {
|
|
198697
|
-
if (isIntRunnerRetryDisabled()) {
|
|
198698
|
-
return fetchFn();
|
|
198699
|
-
}
|
|
198700
|
-
return retryIntRunnerRequest(fetchFn, options);
|
|
198701
|
-
}
|
|
198702
|
-
function generateIdempotencyKey() {
|
|
198703
|
-
if (typeof crypto !== "undefined" && crypto.randomUUID) {
|
|
198704
|
-
return crypto.randomUUID();
|
|
198705
|
-
}
|
|
198706
|
-
return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
198707
|
-
}
|
|
198708
|
-
function createIdempotentHeaders() {
|
|
198709
|
-
const headers = {
|
|
198710
|
-
"Content-Type": "application/json"
|
|
198711
|
-
};
|
|
198712
|
-
{
|
|
198713
|
-
headers["Idempotency-Key"] = generateIdempotencyKey();
|
|
198714
|
-
}
|
|
198715
|
-
return headers;
|
|
198716
|
-
}
|
|
198717
198619
|
const startRecorder = async (session, onEvent, testIdAttributeName, signal, timeoutMs = 3e5) => {
|
|
198718
198620
|
const timeoutController = new AbortController();
|
|
198719
|
-
const timeoutId = setTimeout(() =>
|
|
198720
|
-
timeoutController.abort();
|
|
198721
|
-
}, timeoutMs);
|
|
198621
|
+
const timeoutId = setTimeout(() => timeoutController.abort(), timeoutMs);
|
|
198722
198622
|
const combinedSignal = signal ? (() => {
|
|
198723
|
-
const
|
|
198724
|
-
const
|
|
198725
|
-
signal.addEventListener("abort",
|
|
198726
|
-
timeoutController.signal.addEventListener("abort",
|
|
198727
|
-
return
|
|
198623
|
+
const c2 = new AbortController();
|
|
198624
|
+
const h2 = () => c2.abort();
|
|
198625
|
+
signal.addEventListener("abort", h2);
|
|
198626
|
+
timeoutController.signal.addEventListener("abort", h2);
|
|
198627
|
+
return c2.signal;
|
|
198728
198628
|
})() : timeoutController.signal;
|
|
198729
198629
|
try {
|
|
198730
|
-
await makeStreamingRequest(
|
|
198731
|
-
|
|
198732
|
-
|
|
198733
|
-
|
|
198734
|
-
|
|
198735
|
-
body: {
|
|
198736
|
-
session,
|
|
198737
|
-
testIdAttributeName
|
|
198738
|
-
},
|
|
198739
|
-
signal: combinedSignal
|
|
198740
|
-
}
|
|
198741
|
-
);
|
|
198630
|
+
await makeStreamingRequest(apiUrl("/api/int-runner/start-recorder"), onEvent, {
|
|
198631
|
+
method: "POST",
|
|
198632
|
+
body: { session, testIdAttributeName },
|
|
198633
|
+
signal: combinedSignal
|
|
198634
|
+
});
|
|
198742
198635
|
} catch (error) {
|
|
198743
198636
|
if (timeoutController.signal.aborted && !(signal == null ? void 0 : signal.aborted)) {
|
|
198744
198637
|
throw new Error(`startRecorder timed out after ${timeoutMs}ms`);
|
|
@@ -198749,16 +198642,12 @@ const startRecorder = async (session, onEvent, testIdAttributeName, signal, time
|
|
|
198749
198642
|
}
|
|
198750
198643
|
};
|
|
198751
198644
|
const stopRecorder = async (session) => {
|
|
198752
|
-
const
|
|
198753
|
-
|
|
198754
|
-
|
|
198755
|
-
|
|
198756
|
-
|
|
198757
|
-
|
|
198758
|
-
})
|
|
198759
|
-
})
|
|
198760
|
-
);
|
|
198761
|
-
return response.json();
|
|
198645
|
+
const res = await fetch(apiUrl("/api/int-runner/stop-recorder"), {
|
|
198646
|
+
method: "POST",
|
|
198647
|
+
headers: { "Content-Type": "application/json" },
|
|
198648
|
+
body: JSON.stringify({ session })
|
|
198649
|
+
});
|
|
198650
|
+
return res.json();
|
|
198762
198651
|
};
|
|
198763
198652
|
const DraggableToolbar = ({
|
|
198764
198653
|
actions,
|
|
@@ -200733,7 +200622,7 @@ const Login = { "title": "Login", "continueWithGoogle": "Continue with Google",
|
|
|
200733
200622
|
const OAuth = { "slackCallback": { "loading": "Loading...", "processingLogin": "Processing login...", "errorWithMessage": "Error: {error}", "parentClosedWarning": "Parent window was closed before callback." } };
|
|
200734
200623
|
const Invite = { "accept": { "loadingInvitation": "Loading invitation...", "invalidInvitationTitle": "Invalid Invitation", "goToLogin": "Go to Login", "acceptedTitle": "Invitation Accepted!", "memberOfOrganization": "You are now a member of {organization}", "loginToAccess": "Please log in to access your organization", "youAreInvitedTitle": "You've been invited!", "youAreInvitedSubtitle": "You've been invited to join an organization", "cancel": "Cancel", "acceptInvitation": "Accept Invitation", "labels": { "organization": "Organization", "invitedEmail": "Invited Email", "role": "Role", "invitedBy": "Invited by", "expires": "Expires" }, "roles": { "admin": "Admin", "member": "Member" }, "errors": { "failedToLoadInvitation": "Failed to load invitation", "invalidInvitation": "Invalid invitation", "failedToLoadInvitationDetails": "Failed to load invitation details", "failedToAcceptInvitation": "Failed to accept invitation" } } };
|
|
200735
200624
|
const GeneralSettings = { "sectionProfile": "Profile", "profilePicture": "Profile picture", "profilePictureFormats": "Supported formats: PNG/JPEG/JPG. Maximum file size: 5MB", "email": "Email", "fullName": "Full Name", "fullNamePlaceholder": "Enter your full name", "saveChanges": "Save Changes", "clear": "Clear", "avatarClearedTitle": "Avatar Cleared", "avatarClearedMessage": "Click Save Changes to update your profile", "sectionAppearance": "Appearance", "theme": "Theme", "language": "Language", "sectionDevelopment": "Development", "experimentalFeatures": "Experimental Features", "debugging": "Debugging", "profileUpdatedMessage": "Profile updated successfully", "profileUpdateFailedMessage": "Failed to update profile", "avatarUpdatedMessage": "Avatar updated successfully", "avatarUpdateFailedMessage": "Failed to update avatar" };
|
|
200736
|
-
const TestCases = /* @__PURE__ */ JSON.parse(`{"cannotUpdateSystemViews":"Cannot update system views","viewUpdatedSuccessfully":"View updated successfully","failedToUpdateView":"Failed to update view","generateAiTitle":"Generate AI Title","revertToOriginalTitle":"Revert to Original Title","runInCloud":"Run in Cloud","hideDetails":"Hide details","showDetails":"Show details","testMustBeActiveToRunInCloud":"Test must be Active to run in cloud","cannotRunTest":"Cannot Run Test","testCaseMustBeActiveToRun":"Test case must be Active to run","failedToLoadTestCaseDetails":"Failed to load test case details","failedToUpdateTestCaseStatus":"Failed to update test case status","testCaseDuplicatedSuccessfully":"Test case duplicated successfully","failedToDuplicateTestCase":"Failed to duplicate test case","testCaseStatusUpdated":"Test case status updated","runTest":"Run Test","testCaseMustBeActive":"Test Case must be Active to run","viewRecording":"View Recording","noRecordingAvailable":"No Recording Available","deleteTestCaseTitle":"Delete test case?","deleteTestCaseInUse":"This test case is used as a dependency for other tests. Please remove the dependency first.","deleteTestCaseConfirm":"Are you sure you want to delete","deleteTestCaseUndone":"This action cannot be undone.","setupBadgeLabel":"Setup","setupBadgeTooltip":"This test is used as a setup test for other tests","teardownBadgeLabel":"Teardown","teardownBadgeTooltip":"This test is used as a teardown test for other tests","loadingTestCaseDetails":"Loading test case details","deleteSelected":"Delete Selected","deleteTestCasesTitle":"Delete test cases?","deleteTestCasesInUse":"Some test cases are used as dependencies for other tests. Please remove these dependencies first.","theseTestCases":"These test cases","thisTestCase":"This test case","statusLabel":"Status","labelsLabel":"Labels","failedToUpdateTestCaseLabel":"Failed to update test case label","detailPage":{"failedToLoadTestCase":"Failed to load test case","testCaseNotFound":"Test case not found","returnToTestCases":"Return to Test Cases","retry":"Retry"},"runTestModal":{"titleSingle":"Run Test in Cloud","titleMultiple":"Run {count} Test Case(s) in Cloud","titleSuite":"Run Test Suite in Cloud","titleSchedule":"Run Schedule in Cloud","runButton":"Run Test","runMultipleButton":"Run {count} Test(s)","envDescription":"Only environments configured for this test case are shown","envMultiDescription":"Test cases will run using the selected environment. Test cases that don't support this environment will be skipped."},"failedToLoadTestAccounts":"Failed to load test accounts","fixAcceptedTitle":"Fix accepted","fixAcceptedMessage":"The AI fix has been applied to the test case.","fixRejectedTitle":"Fix rejected","fixRejectedMessage":"The AI fix has been rejected and will not be used in future runs.","testFlowReverted":"Test flow reverted to this version","environmentRequired":"Environment is required","environmentSetAsStepEditorEnv":"Environment set as step editor env successfully","deleteEnvironmentConfigTitle":"Delete Environment Config?","environmentConfigDeletedSuccessfully":"Environment config deleted successfully","knowledgeExtractedTitle":"Knowledge Extracted","extractionFailedTitle":"Extraction Failed","saveBLockedTitle":"Save Blocked","saveBlockedNestedTemplates":"Templates cannot contain nested templates. Remove nested template references before saving.","templateInsertedTitle":"Template Inserted","templateInsertedMessage":"Template content inserted as a normal group. Nested templates are not allowed, so the content has been copied instead of referenced.","sessionTimedOutTitle":"Session timed out","sessionTimedOutMessage":"Your session was reset due to inactivity. Start debug again to continue.","testFlowUnsavedChangesTitle":"Test flow has unsaved changes","testFlowUnsavedChangesMessage":"Current test flow has unsaved changes. Please save first, or leave this page and discard the changes.","continueEditing":"Continue Editing","discardAndLeave":"Discard And Leave","failedToLoadTestAccountsNotification":"Failed to load test accounts","loadingTestCaseDetailsState":"Loading test case details...","generatingTestCase":"Generating Test Case","stop":"Stop","generatingDescription":"This might take a few minutes. You can stop the process at any time.","agentCouldNotComplete":"Agent could not complete the task","dismissWarning":"Dismiss warning","nativeTestWarning":"Native app tests (Android/iOS) can only be edited and debugged in the desktop app.","convertingTestFormat":"Converting test format...","selectPlaceholder":"Select {title}","viewTestCaseTooltip":"View test case: {title}","summaryTitle":"Summary","generateAiSummary":"Generate AI Summary","resetToOriginalSummary":"Reset to original summary","saving":"Saving...","clickToAddSummary":"Click to add a test summary...","labelsTitle":"Labels","addLabel":"Add label","testSuitesTitle":"Test Suites","addToTestSuite":"Add to test suite","statusGenerating":"AI agent is generating your test case","statusQueued":"Test case is queued for generation","statusGeneratingLabel":"Generating","statusQueuedLabel":"Queued","changeStatus":"Change Status","searchTestCases":"Search test cases...","columnId":"ID","columnName":"Name","columnStatus":"Status","setupTeardownMenu":{"selectTitle":"Select {title}"},"parameterSets":{"description":"Named variable sets. Each enabled set produces an independent result row when the test is run in this schedule.","columnLabel":"Label","columnVariables":"Variables","columnEnabled":"Enabled","defaultLabel":"Default","testCaseVariablesLabel":"test case variables","addParameterSet":"Add Parameter Set","editParameterSet":"Edit Parameter Set","editDefaultVariables":"Edit Default Variables","deleteParameterSet":"Delete Parameter Set","labelField":"Label","labelPlaceholder":"e.g. Admin, Guest User","labelAlreadyExists":"A parameter set with this label already exists.","deleteConfirm":"Are you sure you want to delete this parameter set? This cannot be undone.","editDefaultDescription":"These are the test case's own variables. Changes here update the test case settings and apply to all schedules that don't override them with a custom parameter set.","add":"Add","update":"Update"},"variables":{"title":"Variables","description":"Variables scoped to this test case. They override environment and global variables with the same name.","columnName":"Name","columnValue":"Value","addVariable":"Add Variable","namePlaceholder":"name","valuePlaceholder":"value","nameRequired":"Required","nameAlreadyExists":"Already exists","sensitiveMasked":"Sensitive: value is masked in the UI and logs","markSensitive":"Mark as sensitive to mask the value in the UI and logs"},"debuggerWarnings":{"heading":"Statements have been modified during debugging","body":"Changes made during debugging session may not reflect actual execution behavior. Consider restarting the debugging session to ensure consistency."},"debuggerButtonBar":{"undoRevert":"Undo revert","revertChanges":"Revert changes","undo":"Undo","revert":"Revert","saveChanges":"Save all changes to statements","noChanges":"No changes to save","save":"Save","saved":"Saved","disabledDuringGeneration":"Disabled during test generation","startWithOverride":"Initialize debugging session with URL override: {url} (Ctrl + R)","startDebugging":"Initialize debugging session and execute first statement (Ctrl + R)","noMoreStatements":"No more statements to execute","executeNext":"Execute the next statement in sequence (Ctrl + R)","urlOverrideTooltip":"URL override: {url}","setUrlOverride":"Set URL override","urlOverrideSection":"URL Override","urlOverridePlaceholder":"https://example.com/path","waitingForStep":"Waiting for current step to complete...","pauseExecution":"Pause execution after current step","executeAll":"Execute all remaining statements","pause":"Pause","run":"Run","resetSession":"Reset session","reset":"Reset","start":"Start","step":"Step"},"statementBadge":{"unsavedChanges":"Unsaved changes"},"ifElseStatement":{"then":"Then","else":"Else","expandThen":"Expand then branch","collapseThen":"Collapse then branch","expandElse":"Expand else branch","collapseElse":"Collapse else branch","clearThenBranch":"Clear Then Branch","clearThenTooltip":"Remove all statements from the THEN branch. The ELSE branch (if present) will not be affected. This action cannot be undone.","addElseBranch":"Add else branch","removeElseBranch":"Remove else branch","aiCondition":"AI Condition: Natural language evaluation","jsCondition":"JS Condition: JavaScript expression","ifElseActions":"If/Else Actions","clickToAddCondition":"Click to add condition","disabled":"Disabled","conditionPlaceholder":"Enter condition expression...","clearThenItem1":"Remove all statements from the THEN branch.","clearThenItem2":"The ELSE branch (if present) will not be affected.","clearThenItem3":"This action cannot be undone."},"whileLoopStatement":{"loopBody":"Loop Body","expandLoop":"Expand loop body","collapseLoop":"Collapse loop body","secondsMax":"seconds max","clearLoopBody":"Clear Loop Body","clearLoopTooltip":"Remove all statements from the loop body. The loop condition will remain unchanged. This action cannot be undone.","aiCondition":"AI Condition: Natural language evaluation","jsCondition":"JS Condition: JavaScript expression","loopActions":"Loop Actions","clickToAddCondition":"Click to add condition","disabled":"Disabled","conditionPlaceholder":"Enter loop condition...","clearBodyItem1":"Remove all statements from the loop body.","clearBodyItem2":"The loop condition will remain unchanged.","clearBodyItem3":"This action cannot be undone."},"floatingAddButton":{"addNewStep":"Add a new step"},"floatingActionBar":{"run":"Run this step","runUntil":"Run until this step","moveUp":"Move up","moveDown":"Move down","duplicate":"Duplicate","edit":"Modify","delete":"Delete"},"saveTemplate":{"title":"Save as Template","nameLabel":"Name","namePlaceholder":"e.g., user-registration, checkout-flow","nameDescription":"Give this template a unique name for easy identification","nameRequired":"Name is required","nameExists":"Name \\"{name}\\" already exists","description":"Description","nameAlreadyExists":"Name Already Exists"},"selectTemplate":{"title":"Select Template","searchPlaceholder":"Search templates...","noMatch":"No templates match your search","noTemplates":"No templates available","columnName":"Name","columnDescription":"Description","copyTooltip":"Insert as independent copy. Changes to the template won't affect this group.","linkTooltip":"Link to template. This group will stay in sync with the template.","linkDisabledTooltip":"Templates can't link other templates. Use Copy instead.","copy":"Copy","link":"Link","copyButton":"Copy Button","linkButton":"Link Button","noTemplatesAvailable":"No Templates Available","noTemplatesMatchSearch":"No Templates Match Search"},"statementList":{"noStatements":"No statements","noStatementsReadOnly":"No statements (read-only)"},"suiteSectionDivider":{"skipped":" (skipped)","skippedSuffix":"Skipped Suffix"},"codeEditor":{"cancelTooltip":"Cancel (Esc)","confirmTooltip":"Confirm code (Ctrl+Enter)","hint":"Press Ctrl+Enter to confirm, Esc to cancel","unsavedChanges":"• Unsaved changes","clickToOpen":"Click to open code editor"},"actionEntityEditor":{"cancelTooltip":"Cancel (Esc)","confirmTooltip":"Confirm changes (Ctrl+Enter)","hint":"Press Ctrl+Enter to confirm, Esc to cancel","shortcutHint":"{modifier}+↵ save · esc cancel","unsavedChanges":"• Unsaved changes","missingActionName":"Missing action name","invalidYaml":"Invalid YAML","viewTitle":"View action entity","editTitle":"Click to edit action entity"},"extractContentEditor":{"configurePrompt":"Click to configure variable extraction...","extractAndSave":"Extract <elem>{element}</elem> and save to <var>{variable}</var>","clickToEdit":"Click to edit","clickToConfigure":"Click to configure","configurePlaceholder":"Configure Placeholder","extractDisplayText":"Extract Display Text"},"extractContentModal":{"title":"Extract Content Configuration","whatToExtract":"What to extract","extractPlaceholder":"e.g., order number, user name, price from the table...","extractDescription":"Describe the page element or content you want to extract","variableName":"Variable name","variablePlaceholder":"e.g., orderNumber, userName, tablePrice","variableDescription":"Name of the variable to store the extracted value","extractContent":"Extract Content"},"extractEmailContentEditor":{"noConfigured":"No email content extraction configured","configurePrompt":"Click to configure email content extraction...","variableTooltip":"The variable name will be used to store the extracted content.","variableLabel":"Variable: {name}","clickToConfigure":"Click To Configure","clickToEdit":"Click To Edit","configurePlaceholder":"Configure Placeholder","noConfig":"No Config"},"extractEmailContentModal":{"title":"Email Content Extraction Configuration","selectConfig":"Select configuration","selectConfigPlaceholder":"Select a saved configuration","forwardEmail":"Forward Email","extractionType":"Extraction Type","extractionTypePlaceholder":"Select extraction type","extractionTypeDescription":"The type of content to extract from emails","prompt":"Prompt","promptPlaceholder":"Enter custom prompt for extraction (optional)","promptDescription":"Optional: Custom prompt to guide the extraction process","filterFromEmail":"Filter From Email","filterFromPlaceholder":"Enter email address to filter by sender","filterFromDescription":"Required: Email address to filter emails by sender","filterToEmail":"Filter To Email","filterToPlaceholder":"Enter email address to filter by recipient (optional)","filterToDescription":"Optional: Email address to filter emails by recipient","filterSubject":"Filter Subject","filterSubjectPlaceholder":"Enter subject text to filter by (optional)","filterSubjectDescription":"Optional: Text that must be contained in the email subject","filterBodyContains":"Filter Body Contains","filterBodyPlaceholder":"Enter text that must be in email body (optional)","filterBodyDescription":"Optional: Text that must be contained in the email body","extractionTypeRequired":"Extraction type is required","filterFromEmailRequired":"Filter from email is required"},"fileUploadEditor":{"uploadFile":"Upload file","uploadFiles":"Upload {count} files","noFilesSelected":"No files selected","selectFiles":"Select files to upload","clickToChange":"Click to change files"},"fileUploadModal":{"title":"Select Test Data Files","targetLabel":"(Optional) Upload Target Description","targetSublabel":"(when there are multiple on the page)","targetPlaceholder":"Target description (optional, e.g., 'profile picture upload')","searchPlaceholder":"Search files by name...","loadError":"Failed to load test data files","noFilesMatch":"No files match your search","noFilesAvailable":"No test data files available. Upload files in the Test Data section to use them here.","clearTarget":"Clear target description","selectFile":"Select File","selectFiles":"Select {count} Files","pickFromLocal":"Pick local files"},"functionEditor":{"noParameters":"No parameters","configuredViaModal":"Functions are configured via modal dialog"},"loginEditor":{"configurePrompt":"Click to configure login credentials...","clickToEdit":"Click to edit login configuration","clickToConfigure":"Click to configure login","configurePlaceholder":"Configure Placeholder"},"loginModal":{"title":"Login Configuration","environment":"Environment","environmentPlaceholder":"Select environment (optional)","environmentDescription":"Optional: Environment to login to. If not specified, the session's default environment will be used.","testAccount":"Test Account","selectTestAccount":"Select test account","noAccountsForEnv":"No test accounts available for this environment","noGlobalAccounts":"No global test accounts available","testAccountRequired":"Test Account ID is required","selectAccountDescription":"Select the test account to use for login","createdPrefix":"Created:","idPrefix":"ID:","saveConfiguration":"Save Configuration"},"waitUntilEditor":{"conditionPlaceholder":"Condition: e.g., The loading spinner disappears","clickToAdd":"Click to add wait condition","secondsMaxWait":"seconds max wait","maxTimeoutReached":"Maximum 300s"},"jsonViewer":{"base64ImageLabel":"[Base64 Image - Click to view]","imagePreview":"Image Preview","base64ImageAlt":"Base64 image preview","imageAlt":"Image preview","imagePreviewAlt":"Image Preview Alt","previewTitle":"Preview Title"},"codeTab":{"description":"This code is dynamically generated from the test flow. Edit steps in the Steps tab to modify the test.","error":"Error: {error}","readOnlyPreview":"Read-only preview"},"settingsTab":{"loadingDetails":"Loading test case details...","failedToLoadAccounts":"Failed to load test accounts"},"actionStatement":{"showHideDetails":"Show/Hide details","showDebugInfo":"Show debug info","removeLocator":"Remove locator","debugInfoTitle":"Action Generation Debug Info","picking":"Picking...","pickLocator":"Pick Locator","aiAssertion":"AI Assertion: Natural language verification","jsAssertion":"JS Assertion: Playwright expect expression","aiGroup":"AI Group: Natural language description","groupContainer":"Group Container: Contains nested statements","aiAction":"AI Action: Auto-adapts to page changes","regularAction":"Uses cached element selectors","pureVision":"Pure Vision: Uses only visual analysis","hybridMode":"Hybrid Mode: Uses DOM + visual analysis","settings":"Settings","aiModeLabel":"AI Mode","pureVisionLabel":"Use Vision Only","pureVisionOn":"Pure Vision: Uses only visual analysis","pureVisionOff":"Hybrid Mode: Uses DOM + visual analysis","clearCache":"Clear Cache","cachedAction":"Cached: {actionName}","noCache":"No cached result. Run the step to create one.","disableCacheLabel":"Disable Cache","disableCacheInfo":"When enabled, the step will use AI to dynamically locate elements instead of cached selectors. Runs with cached selectors first, then falls back to AI if cache fails. This is useful when page layout changes frequently.","pureVisionInfo":"When enabled, the step uses only visual (screenshot) analysis without DOM inspection. Useful for canvas-based or non-standard UI elements.","switchType":"Action Type","usingJsCode":"JS Execution","usingJsCodeInfo":"When enabled, the assertion uses a JavaScript Playwright expect expression. Runs with JS first, then falls back to AI if JS fails. When disabled, it uses AI to verify conditions with natural language."},"actionEditor":{"selectActionType":"Select an action type from the dropdown above...","enterAssertion":"Enter assertion description...","functionModal":"Function will be configured via modal...","loginModal":"Login credentials will be configured via modal...","emailModal":"Email extraction will be configured via modal...","waitCondition":"Wait condition will be configured below...","enterAction":"Enter action description...","clickToAdd":"Click to add description"},"newStepEditor":{"loadingDetails":"Loading test case details...","agentCouldNotComplete":"Agent Could Not Complete","convertingFormat":"Converting Format","dismissWarning":"Dismiss Warning"},"actionWithSwitch":{"aiAction":"AI Action","action":"Action","switchToRegular":"Switch to regular action","switchToAi":"Switch to AI action"},"debugStatusIcon":{"skipped":"Skipped","streaming":"Streaming...","executing":"Executing...","executionSuccessful":"Execution successful","executionFailed":"Execution failed","nextStatement":"Next statement to be executed","convertedToAi":"Statement was converted to AI mode for successful execution"},"conditionInput":{"placeholder":"Enter condition expression...","disabled":"Disabled","clickToAddCondition":"Click to add condition"},"environmentConfigForm":{"testAccount":"Test Account","setAsDefault":"Set as default environment for Test Editor","setAsDefaultDescription":"This environment will be used as the default when editing the test steps.","hooksDescription":"Templates that run before/after test execution"},"latestRun":{"notAvailable":"N/A","invalidDate":"Invalid date","seconds":"{totalSeconds} seconds","pending":"Pending","latestResult":"Latest Result","viewRunDetails":"View run details (#{id})","result":"Result","startTime":"Start Time","endTime":"End Time","duration":"Duration","environment":"Environment","default":"Default"},"resizableEditor":{"editor":"Editor","preview":"Preview","clickToExpand":"Click to expand","clickToCollapse":"Click to collapse","dragToResize":"Drag to resize"},"statementWrapper":{"skipped":"Skipped","failed":"Failed","passed":"Passed","addedByAiFix":" · Added by AI fix","modifiedByAiFix":" · Modified by AI fix","movedByAiFix":" · Moved by AI fix","autoHealed":" · Auto healed","showingHealed":"Showing healed action step. Click to switch back to original.","showingOriginal":"Showing original action step. Click to switch to healed.","added":"Added","original":"Original","modified":"Modified","moved":"Moved","draggingDisabled":"Dragging disabled during debugging","dragToReorder":"Drag to reorder","rollbackToStatement":"Rollback to this statement","skipToStatement":"Skip to this statement","executeStatement":"Execute this statement","executeUntilStatement":"Execute until this statement.","executeThisStepDescription":"Executes this step.","executeThisStepItem1":"This will execute the step itself.","executeThisStepItem2":"Use this to quickly test a specific part of the test flow.","runUntilThisStep":"Run Until This Step","runUntilThisStepDescription":"Runs the test flow until this step is executed.","runUntilThisStepItem1":"This will not execute the step itself.","runUntilThisStepItem2":"Use this to quickly test a specific part of the test flow.","currentStatement":"This is the current statement.","editStatement":"Edit Statement","duplicate":"Duplicate","delete":"Delete","actionsLabel":"Actions","draft":"Draft","action":"Action","assertion":"Assertion","code":"Code","function":"Function","uploadFile":"Upload file","extract":"Extract","waitUntil":"Wait Until","group":"Group","template":"Template","extractEmailContent":"Extract Email Content","controlFlows":"Control Flows","ifElse":"If/Else","loop":"Loop","draftTooltip":"A Draft is a flexible statement that converts to Action or Group after execution. Use this when you're not sure if your instruction will need one or multiple steps. After execution, it automatically becomes an Action (single step) or Group (multiple steps) based on what the AI produces. (Ctrl+Alt+B)","draftInstruction1":"A Draft is a flexible statement that converts after execution.","draftInstruction2":"If the AI produces one action, it becomes an Action.","draftInstruction3":"If the AI produces multiple actions, it becomes a Group.","draftInstruction4":"Use this when you're not sure how many steps your instruction will need.","actionTooltip":"An Action performs interactions with the page using natural language descriptions. Examples: \\"Click the submit button\\", \\"Fill in the email field with user@example.com\\", \\"Select California from the state dropdown\\". The AI agent interprets your description and executes the appropriate browser action. (Ctrl+Alt+A)","actionInstruction1":"An Action performs interactions with the page using natural language descriptions.","actionInstruction2":"The AI agent interprets your description and executes the appropriate browser action.","actionInstruction3":"Examples: \\"Click the first search result\\", \\"Scroll to the reviews section\\", \\"Wait for the page to load\\"","assertionTooltip":"An Assertion verifies that something on the page matches your expectations. Examples: \\"The page title should contain Welcome\\", \\"The error message should be visible\\", \\"The cart total should be $99.99\\". Tests will fail if assertions are not met. (Ctrl+Alt+T)","assertionInstruction1":"An Assertion verifies that something on the page matches your expectations.","assertionInstruction2":"Tests will fail if assertions are not met.","assertionInstruction3":"Examples: \\"The page title should contain Welcome\\", \\"The error message should be visible\\", \\"The cart total should be $99.99\\"","editInstruction1":"Edit this statement's configuration, description, or parameters.","editInstruction2":"For actions and assertions, you can modify the natural language description.","editInstruction3":"For code blocks, edit the JavaScript directly.","duplicateTooltip":"Duplicate this statement and all its contents. Useful for creating similar actions with minor variations or repeating patterns. The copy will be inserted immediately after this statement.","duplicateInstruction1":"Duplicate this statement and all its contents.","duplicateInstruction2":"Useful for creating similar actions with minor variations or repeating patterns.","duplicateInstruction3":"The copy will be inserted immediately after this statement.","deleteTooltip":"Delete this statement permanently. For containers like Steps or If/Else blocks, this will also delete all nested statements. Use Ctrl+Alt+D for quick deletion. (Ctrl+Alt+D)","deleteInstruction1":"Permanently removes this statement from the test case.","deleteInstruction2":"For containers like Steps or If/Else blocks, this will also delete all nested statements.","deleteInstruction3":"Use Ctrl+Alt+D for quick deletion.","codeTooltip":"Code blocks execute custom JavaScript directly in the browser context. Use for complex logic, data manipulation, or operations not easily expressed in natural language. Examples: calculating values, parsing JSON, setting cookies, or interacting with browser APIs. Code has access to the page object and all Playwright APIs. (Ctrl+Alt+C)","codeInstruction1":"Code blocks execute custom JavaScript directly in the browser context.","codeInstruction2":"Use for complex logic, data manipulation, or operations not easily expressed in natural language.","codeInstruction3":"The code has access to the page object and can use await for async operations.","codeInstruction4":"Examples: Calculate values, parse JSON, set cookies, or interact with browser APIs.","functionTooltip":"Functions are reusable test components that accept parameters. Use them to avoid duplicating common sequences like login flows, form submissions, or navigation patterns. Example: A \\"Login\\" function with username and password parameters can be reused across multiple tests. (Ctrl+Alt+F)","functionInstruction1":"Functions are reusable test components that accept parameters.","functionInstruction2":"Use them to avoid duplicating common sequences like login flows, form submissions, or navigation patterns.","functionInstruction3":"Examples: A \\"Login\\" function with username and password parameters can be reused across multiple tests.","uploadFileTooltip":"Upload File actions attach files from your Test Data library to file input elements on the page. First upload files in the Test Data section, then select them here. Useful for testing file uploads, document processing, or image submissions. The action automatically handles file input elements and drag-and-drop zones. (Ctrl+Alt+U)","uploadFileInstruction1":"Upload File actions attach files from your Test Data library to file input elements on the page.","uploadFileInstruction2":"First upload files in the Test Data section, then select them here.","uploadFileInstruction3":"Useful for testing file uploads, document processing, or image submissions.","uploadFileInstruction4":"The action automatically handles file input elements and drag-and-drop zones.","extractTooltip":"Extract actions capture content from the page and save it to variables for later use. Examples: \\"Extract the order confirmation number and save to orderNumber\\", \\"Extract the user ID from the profile page and save to userId\\". These variables can be referenced in subsequent actions using $variableName syntax. (Ctrl+Alt+E)","extractInstruction1":"Extract actions capture content from the page and save it to variables for later use.","extractInstruction2":"These variables can be referenced in subsequent actions using $variableName syntax.","extractInstruction3":"Examples: \\"Extract the order confirmation number and save to orderNumber\\", \\"Extract the user ID from the profile page and save to userId\\".","waitUntilTooltip":"Wait for a specific condition to be met before continuing. Use natural language to describe what to wait for, like \\"The loading spinner disappears\\" or \\"The success message appears\\". Set a maximum timeout to prevent tests from hanging. (Ctrl+Alt+W)","waitUntilInstruction1":"Wait for a specific condition to be met before continuing.","waitUntilInstruction2":"Use natural language to describe what to wait for.","waitUntilInstruction3":"Examples: \\"The loading spinner disappears\\", \\"The success message appears\\".","waitUntilInstruction4":"Set a maximum timeout to prevent tests from hanging.","groupTooltip":"Groups are logical containers that organize related actions together. Use them to structure your test into meaningful sections like \\"User Registration\\", \\"Checkout Process\\", or \\"Search and Filter\\". Groups can be collapsed/expanded and help with test readability and maintenance. (Ctrl+Alt+G)","groupInstruction1":"Groups are logical containers that organize related actions together.","groupInstruction2":"Use them to structure your test into meaningful sections like \\"User Registration\\", \\"Checkout Process\\", or \\"Search and Filter\\".","groupInstruction3":"Groups can be collapsed/expanded and help with test readability and maintenance.","templateTooltip":"Templates are pre-defined step groups. Convert this statement to a template reference, then select a template to auto-populate common test patterns like login, navigation, or form submission. (Ctrl+Alt+R)","templateInstruction1":"Templates reference pre-defined step groups for common test patterns.","templateInstruction2":"After conversion, select a template to auto-populate actions.","templateInstruction3":"Examples: login flow, navigation, form submission, data verification.","templateInstruction4":"Helps maintain consistency across tests and reduces duplication.","extractEmailContentTooltip":"Extract specific content from emails like verification codes, activation links, or custom data. Configure filters to target emails from specific senders, with specific subjects, or containing certain text. The extracted content is automatically saved as a variable for use in subsequent test steps.","extractEmailContentInstruction1":"Extract specific content from emails like verification codes or activation links.","extractEmailContentInstruction2":"Configure filters to target emails from specific senders or with specific subjects.","extractEmailContentInstruction3":"Set custom prompts to guide the extraction process.","extractEmailContentInstruction4":"Extracted content is automatically saved as a variable for use in subsequent steps.","ifElseTooltip":"If/Else statements execute different actions based on conditions. The condition can be JavaScript code or natural language. Example: \\"If the user is logged in\\" then perform checkout actions, else show login form. Useful for handling different states, A/B tests, or dynamic content. (Ctrl+Alt+I)","ifElseInstruction1":"If/Else statements execute different actions based on conditions.","ifElseInstruction2":"The condition can be JavaScript code or natural language.","ifElseInstruction3":"Examples: \\"If the user is logged in\\" then perform checkout actions, else show login form.","loopTooltip":"While loops repeat a set of actions as long as a condition is true. Examples: \\"While there are more pages\\" click next and extract data, \\"While the loading spinner is visible\\" wait. Use for pagination, polling for changes, or processing lists of unknown length. Include a maximum iteration limit to prevent infinite loops. (Ctrl+Alt+L)","loopInstruction1":"While loops repeat a set of actions as long as a condition is true.","loopInstruction2":"The condition is checked before each iteration.","loopInstruction3":"Examples: \\"While there are more pages\\" click next and extract data, \\"While the loading spinner is visible\\" wait."},"stepStatement":{"groupActions":"Group Actions","clearAll":"Clear All","clearAllTooltip":"Remove all statements from this step container. This action cannot be undone.","clearAllItem1":"Remove all statements from this step container.","clearAllItem2":"This action cannot be undone.","saveAsTemplateTooltip":"Save this group as a template that can be reused in other test cases.","saveAsTemplateItem1":"Save this group as a template.","saveAsTemplateItem2":"The template can be used in other test cases.","saveAsTemplateItem3":"Current group will be converted to reference the new template."},"createForm":{"titleLabel":"Title","titlePlaceholder":"Enter test case title","showLess":"Show Less","showMore":"Show More","startingUrlLabel":"Starting URL","testAccountLabel":"Test Account","disableAutoLogin":"Disable auto login","targetPlatformLabel":"Target Platform and Device","selectSpecificDevice":"Select specific device","loadingDevices":"Loading devices...","selectAndroidDevice":"Select Android device","iosComingSoon":"iOS device selection coming soon","nativeMobileTesting":"Native mobile app testing via Appium","deviceOptimized":"Test will be optimized for the selected device viewport and characteristics","folderLabel":"Folder","folderOptional":"(optional)","folderPlaceholder":"Select a folder (leave empty for root)","folderHint":"Test case will be created in the selected folder","testCreationMode":"Test Creation Mode","aiGenerate":"AI Generate","aiGenerateDescription":"AI automatically generates test cases","aiImport":"AI Import","aiImportDescription":"Import test cases via YAML upload","single":"Single","batch":"Batch","goalLabel":"Goal","goalOptional":"(optional)","goalPlaceholder":"Describe what you want to test. For example: 'Login to the application and verify the dashboard is displayed'. Or Leave empty to use the no-code editor...","goalHint":"With a goal, AI generates test steps automatically. Without a goal, use the agentic no-code editor to build steps.","testFlowYamlLabel":"Test Flow YAML","testFlowYamlRequired":"(required)","testFlowYamlHint":"Paste exported test case YAML. AI will import and structure the test flow automatically.","testFlowYamlPlaceholder":"Paste exported test case YAML. For example:\\n\\ngoal: Verify user can log in and see dashboard\\nurl: https://example.com\\nstatements:\\n - Navigate to https://example.com/login\\n - Enter \\"test@example.com\\" in the email field\\n - Enter \\"Password123!\\" in the password field\\n - Click the \\"Sign in\\" button\\n - VERIFY: Dashboard is visible\\n\\nOr paste a full exported YAML from an existing test case.","yamlRequired":"Please upload a valid YAML file with test cases","testFlowYamlContentRequired":"Test flow YAML is required","csvRequired":"Please upload a valid CSV file with test cases","modifyTest":"Modify Test","saveTestCase":"Save Test Case","createWithCopilot":"Create with Copilot","creating":"Creating...","creatingCount":"Creating {count} Test Cases...","createCount":"Create {count} Test Cases","createTestCases":"Create Test Cases","createTestCase":"Create Test Case","createNewTestCase":"Create New Test Case","failedToCreateTestCase":"Failed to create test case","retryParamsUnavailable":"Cannot retry: upload parameters not available","generatingTestCases":"Generating test cases...","generatingTestCasesSubText":"Please wait while we generate your test cases. You will be redirected to the test cases list when complete."},"createCodeForm":{"createNewTestCase":"Create New Test Case","agentMode":"Agent Mode","titleLabel":"Title","titlePlaceholder":"Enter test case title","testAccountLabel":"Test Account","setupTest":"Setup Test","teardownTest":"Teardown Test","saveTestCase":"Save Test Case"},"generalSettings":{"settingsTitle":"Settings","disableAutoLogin":"Disable Auto Login","disableAutoLoginTooltip":"When enabled, the test will not automatically log in using the selected environment.","autoDismissModal":"Auto Dismiss Modal","autoDismissModalTooltip":"When enabled, the test will automatically dismiss modals (like cookie consent) during self-healing.","autoFix":"Auto Fix","autoFixTooltip":"Override the organization default for this test case. When enabled, AI will automatically analyze and fix test failures.","autoFixDefault":"Default ({state})","autoFixOn":"On","autoFixOff":"Off","autoFixStateOn":"On","autoFixStateOff":"Off","targetDevice":"Target Device","browserLocale":"Browser Locale","browserLocaleTooltip":"Override the browser's language and timezone for this test. Leave blank to use the browser default.","language":"Language","languagePlaceholder":"Default (en-US)","timezone":"Timezone","timezonePlaceholder":"Default (America/Los_Angeles)","browserMedia":"Browser Media","browserMediaTooltip":"Enables fake camera/microphone + auto-accept media prompts for Chromium. Other browsers ignore these settings.","enableCamera":"Enable Camera","enableMicrophone":"Enable Microphone","fileIdNameNotLoaded":"FILE-{id} (name not loaded)","selectAudioFile":"Select audio file for microphone","audioFileHint":"Audio file from test data to use for fake microphone capture","selectAudioFileModalTitle":"Select Audio File for Microphone","noAudioFiles":"No audio files (.wav or .mp3) found in test data. Upload audio files to use them as microphone input.","browserExtension":"Browser Extension","browserExtensionTooltip":"Loads a Chrome extension from test data (.crx or .zip). Only supported in Chromium and headed mode.","enableExtension":"Enable Extension","selectExtensionFile":"Select extension file","extensionFileHint":"Extension package from test data (.crx or .zip)","selectExtensionFileModalTitle":"Select Extension File","noExtensionFiles":"No extension files (.crx or .zip) found in test data. Upload an extension package to use it.","extraHeaders":"Extra HTTP Headers","extraHeadersTooltip":"Add custom HTTP headers sent with every browser request (e.g., authorization tokens, feature flags). Headers are sent in plain text.","extraHeadersAddButton":"Add Header","extraHeadersNamePlaceholder":"Header name","extraHeadersValuePlaceholder":"Header value","extraHeadersColumnName":"Name","extraHeadersColumnValue":"Value","extraHeadersNameRequired":"Header name is required","extraHeadersNameInvalid":"Invalid header name — use letters, digits, hyphens, or underscores only","extraHeadersNameDuplicate":"Header name already exists","environmentConfigurations":"Environment Configurations"},"environmentSelection":{"environment":"Environment","overrideUrl":"Override URL (Optional)","overrideUrlDefaultPrefix":"Default: {url}","overrideUrlPlaceholder":"Enter custom URL","overrideTestAccount":"Override Test Account (Optional)","overrideTestAccountDescription":"By default, the test account configured for each test case's environment will be used","overrideVariables":"Override Variables (Optional)","overrideVariablesDescription":"Variables defined here will override environment variables for this run","accountsSelectedInfo":"{count} accounts selected. Each account will run separately, creating {count} test run{plural} per test case.","addVariable":"Add Variable","keyPlaceholder":"Key","valuePlaceholder":"Value","removeVariable":"Remove variable"},"environmentConfigsList":{"unknownEnvironment":"Unknown Environment","notConfigured":"Not configured","specificAccountsNoneSelected":"Specific accounts (none selected)","unknown":"Unknown","testEditorEnvironmentTooltip":"This environment is used as the default when editing the test steps.","testEditorEnvironment":"Test Editor Environment","setAsStepEditorEnv":"Set as Step Editor Env","startingUrl":"Starting URL","testAccount":"Test Account","hooks":"Hooks","addEnvironmentConfig":"Add Environment Config","allEnvironmentsConfigured":"All environments have been configured","editEnvironmentConfig":"Edit Environment Config","updateConfig":"Update Config","addConfig":"Add Config"},"explorer":{"loadingTestCases":"Loading test cases","loadingSubText":"This won't take long","emptyTitle":"Tests","emptyDescription1":"Tests are automated checks that validate how your product works, from login flows to complex user journeys.","emptyDescription2":"Each test is a sequence of actions and verifications, powered by AI or written step by step, so you can catch issues before users do.","createFirstTest":"Create your first test","documentation":"Documentation","newRootFolder":"New Root Folder","columnName":"Name","columnStatus":"Status","columnPlatform":"Platform","columnLatestResult":"Latest Result","columnCreatedBy":"Created By","filterStatus":"Status","filterLabels":"Labels","filterCreatedBy":"Created By","filterDevice":"Device","filterEnvironment":"Environment","filterTestAccount":"Test Account","filterTestAccountDescription":"Shows test cases where at least one environment config includes the selected test account.","filterLatestResult":"Latest Result","filterHasAutoFix":"Auto Fix","filterOptionActive":"Active","filterOptionDraft":"Draft","filterOptionPassed":"Passed","filterOptionFailed":"Failed","filterOptionNotStarted":"Not Started","filterOptionHasAutoFix":"Has Auto Fix","filterActive":"Filter Active","filterAutoFix":"Filter Auto Fix","filterDraft":"Filter Draft","filterFailed":"Filter Failed","filterNotStarted":"Filter Not Started","filterPassed":"Filter Passed"},"filterBar":{"statusDisplay":"Status","labelsDisplay":"Labels","statusMore":"{first} + {count} more","labelMore":"{first} + {count} more","devicesPlaceholder":"Devices","clearAllFilters":"Clear all filters","clearShort":"Clear","filterActive":"Filter Active","filterDraft":"Filter Draft"},"liveView":{"liveViewTab":"Live View","videoTab":"Video","previewsTab":"Previews","previewsWithCount":"Previews ({count})","deviceTooltip":"Device: {name}","reload":"Reload","reloading":"Reloading...","exitFullScreen":"Exit full screen","fullScreen":"Full screen","liveViewNotAvailable":"Live View Not Available","liveViewNotAvailableDesc":"Live test preview is not available in Code mode. Switch to Agent mode in Settings to use this feature.","testLiveView":"Test Live View","waitingForGeneration":"Waiting for generation to start...","initializingDebug":"Initializing debug session...","clickToStart":"Click the \\"Start\\" or \\"Run\\" button in the left panel to start the browser and see automation in real-time.","noVideoRecording":"No video recording available","generationScreenshot":"Generation screenshot","waitingForScreenshot":"Waiting for generation screenshot...","livePreviewTitle":"Live Preview Title"},"userSelection":{"noneOption":"None","anyOption":"Any","unknownAccount":"Unknown account","selectedAccounts":"{count} selected accounts","searchPlaceholder":"Search accounts...","createdLabel":"Created: {date}"},"viewRecordingModal":{"title":"Test Recording: {title}","noRecordingAvailable":"No recording available for this test case","failedToLoad":"Failed to load recording","noVideoRecording":"No video recording available","browserNotSupported":"Your browser does not support the video tag."},"simpleList":{"searchPlaceholder":"Search test cases...","columnId":"ID","columnName":"Name","columnUpdated":"Updated"},"sidebar":{"testCaseInfo":"Test Case Info","createdAt":"Created At","lastUpdated":"Last Updated","createdBy":"Created By","updatedBy":"Updated By","targetDevice":"Target Device","actions":"Actions","extractKnowledge":"Extract Knowledge","extractingKnowledge":"Extracting Knowledge...","knowledgeExtractedMessage":"Knowledge has been successfully extracted from this test case","failedToExtractKnowledge":"Failed to extract knowledge","failedToExtractKnowledgeFromTestCase":"Failed to extract knowledge from test case","notAvailable":"N/A"},"statementChanges":{"added":"Added ({count})","deleted":"Deleted ({count})","modified":"Modified ({count})","moved":"Moved ({count})"},"assertions":{"placeholder":"Enter assertion description...","emptyText":"Click to add assertion"},"basicAction":{"placeholder":"Enter action description...","emptyText":"Click to add description","findElement":"Find element"},"infoView":{"variablesTab":"Variables","consoleTab":"Logs","noVariables":"No variables available. Start running your test to see variables here.","noConsoleOutput":"No log output available. Logs will appear here during test execution.","clickToExpand":"Click to expand","dragToResize":"Drag to resize"},"resultPopup":{"latestRunResult":"Latest Run Result","status":"Status:","started":"Started:","ended":"Ended:","duration":"Duration:","environment":"Environment:","summary":"Summary:","notStarted":"Not Started","passedWithAutofix":"Passed with autofix"},"testDataSelector":{"selectTestData":"Select Test Data","needToUpload":"Need to upload test data files?","goToSettings":"Go to Settings → Test Data","selectTestDataModalTitle":"Select Test Data","confirmUploadTitle":"Confirm Upload Test Data","confirmUploadDesc":"Upload file {filename} and attach to the test.","done":"Done","cancel":"Cancel","confirm":"Confirm"},"testDataSelectionList":{"searchPlaceholder":"Search test data file name...","columnId":"ID","columnName":"Name","columnLastUpdated":"Last Updated","done":"Done"},"templateSelector":{"placeholder":"Select a template"},"simpleExplorer":{"searchPlaceholder":"Search test cases...","loadingTestCases":"Loading test cases...","selectedCount":"{count} selected","columnName":"Name","columnStatus":"Status","columnCreatedBy":"Created By"},"layout":{"overviewTab":"Overview","settingsTab":"Settings","historyTab":"History","runRecordsTab":"Run Records","codeTab":"Code","playgroundTab":"UX Playground","autofixAvailable":"An autofix is available for this test case.","viewResult":"View result","closeDetails":"Close details"},"runRecordsTab":{"loadError":"Failed to load run records. Please try again.","empty":"No run records yet","emptyHint":"Run records will appear here after the test case has been executed.","columnRunId":"Run ID","columnResult":"Result","columnStarted":"Started","columnDuration":"Duration","columnEnvironment":"Environment","paginationInfo":"{total} records · Page {page} of {totalPages}"},"diffViewer":{"modalTitle":"Test Flow Changes"},"flowEditor":{"teardownTitle":"Teardown","removeTeardown":"Remove","addTeardown":"Add Teardown"},"plansSection":{"schedulesTitle":"Schedules","noSchedulesLinked":"No schedules linked","viaSuiteBadge":"Via Suite"},"suitesSection":{"testSuitesTitle":"Test Suites","noTestSuitesLinked":"No test suites linked"},"csvSection":{"uploadCsvFile":"Upload CSV File","downloadTemplate":"Download Template","selectCsvFile":"Select CSV file","csvFormatTitle":"CSV Format Requirements","formatDescription":"Your CSV file must contain \\"title\\" and \\"goal\\" columns. The goal column should contain a description of what you want to test. AI will automatically generate test steps based on each goal. Click \\"Download Template\\" above to get a sample file with the correct format.","exampleFormat":"Example format (use quotes for fields containing commas or newlines):","exampleCsv":"title,goal\\nLogin Test,\\"Test login with valid credentials\\"\\nCheckout Test,\\"Test checkout process with multiple items\\"","tipCommasAndNewlines":"Tip: Handling commas and newlines: Wrap fields containing commas or newlines in double quotes","tipIncludingQuotes":"Tip: Including quotes: Use double quotes (\\"\\") to include actual quotes in text","tipGoalFormat":"Tip: Goal format: Provide a clear description of what you want to test (e.g., \\"Test login functionality\\" or \\"Verify checkout process\\")","parsingCsv":"Parsing CSV file...","previewCount":"Preview ({count} test case{plural})","columnTitle":"Title","columnGoal":"Goal","columnTestFlow":"Test Flow","errors":{"fileTooLarge":"File size too large. Please upload a file smaller than 5MB","emptyFile":"CSV file is empty. Please upload a file with test case data","missingHeaderOrData":"CSV file must contain at least a header row and one data row. Please check your file format","missingRequiredColumns":"CSV file must contain \\"title\\" and \\"goal\\" columns. Found columns: {columns}","rowMissingRequiredColumns":"Row {row}: Missing required columns (expected at least {minColumns} columns)","rowMissingTitle":"Row {row}: Missing title","rowMissingGoal":"Row {row}: Missing goal","rowTitleTooLong":"Row {row}: Title too long (max 200 characters)","rowGoalTooLong":"Row {row}: Goal too long (max 2000 characters)","noValidRowsWithDetails":"No valid test cases found. Errors:\\n{errors}{more}","noValidRows":"No valid test cases found in CSV file. Please check your file format","tooManyRows":"Too many test cases. Please limit to 100 test cases per upload","parseFailed":"Failed to parse CSV file. Please check the file format and try again","readFailed":"Failed to read CSV file. Please try again or use a different file","invalidExtension":"Please upload a CSV file"}},"yamlSection":{"uploadYamlFile":"Upload YAML File","downloadTemplate":"Download Template","selectYamlFile":"Select YAML file (.yaml or .yml)","yamlFormatTitle":"YAML Format Requirements","parsingYaml":"Parsing YAML file...","previewCount":"Preview ({count} test case{plural})","columnTitle":"Title","columnGoal":"Goal"},"screencast":{"connecting":"Connecting to screencast...","failedToConnect":"Failed to connect to screencast","disconnected":"Screencast disconnected","browserScreencast":"Browser Screencast"},"multiPageViewer":{"noPagesOpen":"No pages open","connectingToBrowser":"Connecting to browser...","closeInspector":"Close Inspector","openInspector":"Open Inspector","pickingLocator":"Picking locator...","cancelLocatorPicking":"Cancel locator picking","failedToConstructUrl":"Failed to construct DevTools URL","recording":"Recording","record":"Record","clickToStopRecording":"Click to Stop Recording","clickToStartRecording":"Click to Start Recording","picking":"Picking","pick":"Pick","clickToStopPicking":"Click to Stop Picking Element","clickToStartPicking":"Click to Start Picking Element"},"agentFixDiffViewer":{"diffSummaryTitle":"Diff Summary","originalTestFlow":"Original Test Flow","agentFixedTestFlow":"Agent-Fixed Test Flow","changedCount":"{count} changed","statementsCount":"{count} statements","changeLabel":"Change","noChanges":"No changes","noStatements":"No statements to display","changeDetails":"Change Details","deletedInModified":"Deleted in modified","addedInModified":"Added in modified"},"videoPreview":{"creatingTestCase":"Creating Test Case","recordingWillAppearSoon":"Test recording will appear here shortly","testRecordingPreview":"Test Recording Preview","recordingWillAppear":"Test recording will appear here","browserNotSupported":"Your browser does not support the video tag."},"imageViewer":{"noImagesAvailable":"No Images Available","noImagesDesc":"Images will appear here when available from test execution or debugging."},"actionGenerationDebugView":{"tabSystemPrompt":"System Prompt","tabUserPrompt":"User Prompt","tabReasoningContent":"Reasoning Content","tabRawResponse":"Raw Response","tabKnowledge":"Knowledge ({count})","tabCuaInput":"CUA Input","tabCuaResponse":"CUA Response"},"labels":{"labelsTitle":"Labels"},"csvImportProgress":{"backgroundInfo":"You can close this window at any time. The import process will continue in the background.","columnTitle":"Title","columnStatus":"Status","statusPending":"Pending","statusCreating":"Creating","statusGenerating":"Generating","statusCompleted":"Completed","statusError":"Error","goToTestCases":"Go To Test Cases"},"historyViewer":{"title":"Test Flow History Version","updatedAt":"{name} updated at {timeAgo}"},"generationView":{"queued":"Queued","regenerating":"({count})Regenerating a better test","generating":"Generating"}}`);
|
|
200625
|
+
const TestCases = /* @__PURE__ */ JSON.parse(`{"cannotUpdateSystemViews":"Cannot update system views","viewUpdatedSuccessfully":"View updated successfully","failedToUpdateView":"Failed to update view","generateAiTitle":"Generate AI Title","revertToOriginalTitle":"Revert to Original Title","runInCloud":"Run in Cloud","hideDetails":"Hide details","showDetails":"Show details","testMustBeActiveToRunInCloud":"Test must be Active to run in cloud","cannotRunTest":"Cannot Run Test","testCaseMustBeActiveToRun":"Test case must be Active to run","failedToLoadTestCaseDetails":"Failed to load test case details","failedToUpdateTestCaseStatus":"Failed to update test case status","testCaseDuplicatedSuccessfully":"Test case duplicated successfully","failedToDuplicateTestCase":"Failed to duplicate test case","testCaseStatusUpdated":"Test case status updated","runTest":"Run Test","testCaseMustBeActive":"Test Case must be Active to run","viewRecording":"View Recording","noRecordingAvailable":"No Recording Available","deleteTestCaseTitle":"Delete test case?","deleteTestCaseInUse":"This test case is used as a dependency for other tests. Please remove the dependency first.","deleteTestCaseConfirm":"Are you sure you want to delete","deleteTestCaseUndone":"This action cannot be undone.","setupBadgeLabel":"Setup","setupBadgeTooltip":"This test is used as a setup test for other tests","teardownBadgeLabel":"Teardown","teardownBadgeTooltip":"This test is used as a teardown test for other tests","loadingTestCaseDetails":"Loading test case details","deleteSelected":"Delete Selected","deleteTestCasesTitle":"Delete test cases?","deleteTestCasesInUse":"Some test cases are used as dependencies for other tests. Please remove these dependencies first.","theseTestCases":"These test cases","thisTestCase":"This test case","statusLabel":"Status","labelsLabel":"Labels","failedToUpdateTestCaseLabel":"Failed to update test case label","detailPage":{"failedToLoadTestCase":"Failed to load test case","testCaseNotFound":"Test case not found","returnToTestCases":"Return to Test Cases","retry":"Retry"},"runTestModal":{"titleSingle":"Run Test in Cloud","titleMultiple":"Run {count} Test Case(s) in Cloud","titleSuite":"Run Test Suite in Cloud","titleSchedule":"Run Schedule in Cloud","runButton":"Run Test","runMultipleButton":"Run {count} Test(s)","envDescription":"Only environments configured for this test case are shown","envMultiDescription":"Test cases will run using the selected environment. Test cases that don't support this environment will be skipped."},"failedToLoadTestAccounts":"Failed to load test accounts","fixAcceptedTitle":"Fix accepted","fixAcceptedMessage":"The AI fix has been applied to the test case.","fixRejectedTitle":"Fix rejected","fixRejectedMessage":"The AI fix has been rejected and will not be used in future runs.","testFlowReverted":"Test flow reverted to this version","environmentRequired":"Environment is required","environmentSetAsStepEditorEnv":"Environment set as step editor env successfully","deleteEnvironmentConfigTitle":"Delete Environment Config?","environmentConfigDeletedSuccessfully":"Environment config deleted successfully","knowledgeExtractedTitle":"Knowledge Extracted","extractionFailedTitle":"Extraction Failed","saveBLockedTitle":"Save Blocked","saveBlockedNestedTemplates":"Templates cannot contain nested templates. Remove nested template references before saving.","templateInsertedTitle":"Template Inserted","templateInsertedMessage":"Template content inserted as a normal group. Nested templates are not allowed, so the content has been copied instead of referenced.","sessionTimedOutTitle":"Session timed out","sessionTimedOutMessage":"Your session was reset due to inactivity. Start debug again to continue.","testFlowUnsavedChangesTitle":"Test flow has unsaved changes","testFlowUnsavedChangesMessage":"Current test flow has unsaved changes. Please save first, or leave this page and discard the changes.","continueEditing":"Continue Editing","discardAndLeave":"Discard And Leave","failedToLoadTestAccountsNotification":"Failed to load test accounts","loadingTestCaseDetailsState":"Loading test case details...","generatingTestCase":"Generating Test Case","stop":"Stop","generatingDescription":"This might take a few minutes. You can stop the process at any time.","agentCouldNotComplete":"Agent could not complete the task","dismissWarning":"Dismiss warning","nativeTestWarning":"Native app tests (Android/iOS) can only be edited and debugged in the desktop app.","convertingTestFormat":"Converting test format...","selectPlaceholder":"Select {title}","viewTestCaseTooltip":"View test case: {title}","summaryTitle":"Summary","generateAiSummary":"Generate AI Summary","resetToOriginalSummary":"Reset to original summary","saving":"Saving...","clickToAddSummary":"Click to add a test summary...","labelsTitle":"Labels","addLabel":"Add label","testSuitesTitle":"Test Suites","addToTestSuite":"Add to test suite","statusGenerating":"AI agent is generating your test case","statusQueued":"Test case is queued for generation","statusGeneratingLabel":"Generating","statusQueuedLabel":"Queued","changeStatus":"Change Status","searchTestCases":"Search test cases...","columnId":"ID","columnName":"Name","columnStatus":"Status","setupTeardownMenu":{"selectTitle":"Select {title}"},"parameterSets":{"description":"Named variable sets. Each enabled set produces an independent result row when the test is run in this schedule.","columnLabel":"Label","columnVariables":"Variables","columnEnabled":"Enabled","defaultLabel":"Default","testCaseVariablesLabel":"test case variables","addParameterSet":"Add Parameter Set","editParameterSet":"Edit Parameter Set","editDefaultVariables":"Edit Default Variables","deleteParameterSet":"Delete Parameter Set","labelField":"Label","labelPlaceholder":"e.g. Admin, Guest User","labelAlreadyExists":"A parameter set with this label already exists.","deleteConfirm":"Are you sure you want to delete this parameter set? This cannot be undone.","editDefaultDescription":"These are the test case's own variables. Changes here update the test case settings and apply to all schedules that don't override them with a custom parameter set.","add":"Add","update":"Update"},"variables":{"title":"Variables","description":"Variables scoped to this test case. They override environment and global variables with the same name.","columnName":"Name","columnValue":"Value","addVariable":"Add Variable","namePlaceholder":"name","valuePlaceholder":"value","nameRequired":"Required","nameAlreadyExists":"Already exists","sensitiveMasked":"Sensitive: value is masked in the UI and logs","markSensitive":"Mark as sensitive to mask the value in the UI and logs"},"debuggerWarnings":{"heading":"Statements have been modified during debugging","body":"Changes made during debugging session may not reflect actual execution behavior. Consider restarting the debugging session to ensure consistency."},"debuggerButtonBar":{"undoRevert":"Undo revert","revertChanges":"Revert changes","undo":"Undo","revert":"Revert","saveChanges":"Save all changes to statements","noChanges":"No changes to save","save":"Save","saved":"Saved","disabledDuringGeneration":"Disabled during test generation","startWithOverride":"Initialize debugging session with URL override: {url} (Ctrl + R)","startDebugging":"Initialize debugging session and execute first statement (Ctrl + R)","noMoreStatements":"No more statements to execute","executeNext":"Execute the next statement in sequence (Ctrl + R)","urlOverrideTooltip":"URL override: {url}","setUrlOverride":"Set URL override","urlOverrideSection":"URL Override","urlOverridePlaceholder":"https://example.com/path","waitingForStep":"Waiting for current step to complete...","pauseExecution":"Pause execution after current step","executeAll":"Execute all remaining statements","pause":"Pause","run":"Run","resetSession":"Reset session","reset":"Reset","start":"Start","step":"Step"},"statementBadge":{"unsavedChanges":"Unsaved changes"},"ifElseStatement":{"then":"Then","else":"Else","expandThen":"Expand then branch","collapseThen":"Collapse then branch","expandElse":"Expand else branch","collapseElse":"Collapse else branch","clearThenBranch":"Clear Then Branch","clearThenTooltip":"Remove all statements from the THEN branch. The ELSE branch (if present) will not be affected. This action cannot be undone.","addElseBranch":"Add else branch","removeElseBranch":"Remove else branch","aiCondition":"AI Condition: Natural language evaluation","jsCondition":"JS Condition: JavaScript expression","ifElseActions":"If/Else Actions","clickToAddCondition":"Click to add condition","disabled":"Disabled","conditionPlaceholder":"Enter condition expression...","clearThenItem1":"Remove all statements from the THEN branch.","clearThenItem2":"The ELSE branch (if present) will not be affected.","clearThenItem3":"This action cannot be undone."},"whileLoopStatement":{"loopBody":"Loop Body","expandLoop":"Expand loop body","collapseLoop":"Collapse loop body","secondsMax":"seconds max","clearLoopBody":"Clear Loop Body","clearLoopTooltip":"Remove all statements from the loop body. The loop condition will remain unchanged. This action cannot be undone.","aiCondition":"AI Condition: Natural language evaluation","jsCondition":"JS Condition: JavaScript expression","loopActions":"Loop Actions","clickToAddCondition":"Click to add condition","disabled":"Disabled","conditionPlaceholder":"Enter loop condition...","clearBodyItem1":"Remove all statements from the loop body.","clearBodyItem2":"The loop condition will remain unchanged.","clearBodyItem3":"This action cannot be undone."},"floatingAddButton":{"addNewStep":"Add a new step"},"floatingActionBar":{"run":"Run this step","runUntil":"Run until this step","moveUp":"Move up","moveDown":"Move down","duplicate":"Duplicate","edit":"Modify","delete":"Delete","rollback":"Rollback to this statement","skipTo":"Skip to this statement"},"saveTemplate":{"title":"Save as Template","nameLabel":"Name","namePlaceholder":"e.g., user-registration, checkout-flow","nameDescription":"Give this template a unique name for easy identification","nameRequired":"Name is required","nameExists":"Name \\"{name}\\" already exists","description":"Description","nameAlreadyExists":"Name Already Exists"},"selectTemplate":{"title":"Select Template","searchPlaceholder":"Search templates...","noMatch":"No templates match your search","noTemplates":"No templates available","columnName":"Name","columnDescription":"Description","copyTooltip":"Insert as independent copy. Changes to the template won't affect this group.","linkTooltip":"Link to template. This group will stay in sync with the template.","linkDisabledTooltip":"Templates can't link other templates. Use Copy instead.","copy":"Copy","link":"Link","copyButton":"Copy Button","linkButton":"Link Button","noTemplatesAvailable":"No Templates Available","noTemplatesMatchSearch":"No Templates Match Search"},"statementList":{"noStatements":"No statements","noStatementsReadOnly":"No statements (read-only)"},"suiteSectionDivider":{"skipped":" (skipped)","skippedSuffix":"Skipped Suffix"},"codeEditor":{"cancelTooltip":"Cancel (Esc)","confirmTooltip":"Confirm code (Ctrl+Enter)","hint":"Press Ctrl+Enter to confirm, Esc to cancel","unsavedChanges":"• Unsaved changes","clickToOpen":"Click to open code editor"},"actionEntityEditor":{"cancelTooltip":"Cancel (Esc)","confirmTooltip":"Confirm changes (Ctrl+Enter)","hint":"Press Ctrl+Enter to confirm, Esc to cancel","shortcutHint":"{modifier}+↵ save · esc cancel","unsavedChanges":"• Unsaved changes","missingActionName":"Missing action name","invalidYaml":"Invalid YAML","viewTitle":"View action entity","editTitle":"Click to edit action entity"},"extractContentEditor":{"configurePrompt":"Click to configure variable extraction...","extractAndSave":"Extract <elem>{element}</elem> and save to <var>{variable}</var>","clickToEdit":"Click to edit","clickToConfigure":"Click to configure","configurePlaceholder":"Configure Placeholder","extractDisplayText":"Extract Display Text"},"extractContentModal":{"title":"Extract Content Configuration","whatToExtract":"What to extract","extractPlaceholder":"e.g., order number, user name, price from the table...","extractDescription":"Describe the page element or content you want to extract","variableName":"Variable name","variablePlaceholder":"e.g., orderNumber, userName, tablePrice","variableDescription":"Name of the variable to store the extracted value","extractContent":"Extract Content"},"extractEmailContentEditor":{"noConfigured":"No email content extraction configured","configurePrompt":"Click to configure email content extraction...","variableTooltip":"The variable name will be used to store the extracted content.","variableLabel":"Variable: {name}","clickToConfigure":"Click To Configure","clickToEdit":"Click To Edit","configurePlaceholder":"Configure Placeholder","noConfig":"No Config"},"extractEmailContentModal":{"title":"Email Content Extraction Configuration","selectConfig":"Select configuration","selectConfigPlaceholder":"Select a saved configuration","forwardEmail":"Forward Email","extractionType":"Extraction Type","extractionTypePlaceholder":"Select extraction type","extractionTypeDescription":"The type of content to extract from emails","prompt":"Prompt","promptPlaceholder":"Enter custom prompt for extraction (optional)","promptDescription":"Optional: Custom prompt to guide the extraction process","filterFromEmail":"Filter From Email","filterFromPlaceholder":"Enter email address to filter by sender","filterFromDescription":"Required: Email address to filter emails by sender","filterToEmail":"Filter To Email","filterToPlaceholder":"Enter email address to filter by recipient (optional)","filterToDescription":"Optional: Email address to filter emails by recipient","filterSubject":"Filter Subject","filterSubjectPlaceholder":"Enter subject text to filter by (optional)","filterSubjectDescription":"Optional: Text that must be contained in the email subject","filterBodyContains":"Filter Body Contains","filterBodyPlaceholder":"Enter text that must be in email body (optional)","filterBodyDescription":"Optional: Text that must be contained in the email body","extractionTypeRequired":"Extraction type is required","filterFromEmailRequired":"Filter from email is required"},"fileUploadEditor":{"uploadFile":"Upload file","uploadFiles":"Upload {count} files","noFilesSelected":"No files selected","selectFiles":"Select files to upload","clickToChange":"Click to change files"},"fileUploadModal":{"title":"Select Test Data Files","targetLabel":"(Optional) Upload Target Description","targetSublabel":"(when there are multiple on the page)","targetPlaceholder":"Target description (optional, e.g., 'profile picture upload')","searchPlaceholder":"Search files by name...","loadError":"Failed to load test data files","noFilesMatch":"No files match your search","noFilesAvailable":"No test data files available. Upload files in the Test Data section to use them here.","clearTarget":"Clear target description","selectFile":"Select File","selectFiles":"Select {count} Files","pickFromLocal":"Pick local files"},"functionEditor":{"noParameters":"No parameters","configuredViaModal":"Functions are configured via modal dialog"},"loginEditor":{"configurePrompt":"Click to configure login credentials...","clickToEdit":"Click to edit login configuration","clickToConfigure":"Click to configure login","configurePlaceholder":"Configure Placeholder"},"loginModal":{"title":"Login Configuration","environment":"Environment","environmentPlaceholder":"Select environment (optional)","environmentDescription":"Optional: Environment to login to. If not specified, the session's default environment will be used.","testAccount":"Test Account","selectTestAccount":"Select test account","noAccountsForEnv":"No test accounts available for this environment","noGlobalAccounts":"No global test accounts available","testAccountRequired":"Test Account ID is required","selectAccountDescription":"Select the test account to use for login","createdPrefix":"Created:","idPrefix":"ID:","saveConfiguration":"Save Configuration"},"waitUntilEditor":{"conditionPlaceholder":"Condition: e.g., The loading spinner disappears","clickToAdd":"Click to add wait condition","secondsMaxWait":"seconds max wait","maxTimeoutReached":"Maximum 300s"},"jsonViewer":{"base64ImageLabel":"[Base64 Image - Click to view]","imagePreview":"Image Preview","base64ImageAlt":"Base64 image preview","imageAlt":"Image preview","imagePreviewAlt":"Image Preview Alt","previewTitle":"Preview Title"},"codeTab":{"description":"This code is dynamically generated from the test flow. Edit steps in the Steps tab to modify the test.","error":"Error: {error}","readOnlyPreview":"Read-only preview"},"settingsTab":{"loadingDetails":"Loading test case details...","failedToLoadAccounts":"Failed to load test accounts"},"actionStatement":{"showHideDetails":"Show/Hide details","showDebugInfo":"Show debug info","removeLocator":"Remove locator","debugInfoTitle":"Action Generation Debug Info","picking":"Picking...","pickLocator":"Pick Locator","aiAssertion":"AI Assertion: Natural language verification","jsAssertion":"JS Assertion: Playwright expect expression","aiGroup":"AI Group: Natural language description","groupContainer":"Group Container: Contains nested statements","aiAction":"AI Action: Auto-adapts to page changes","regularAction":"Uses cached element selectors","pureVision":"Pure Vision: Uses only visual analysis","hybridMode":"Hybrid Mode: Uses DOM + visual analysis","settings":"Settings","aiModeLabel":"AI Mode","pureVisionLabel":"Use Vision Only","pureVisionOn":"Pure Vision: Uses only visual analysis","pureVisionOff":"Hybrid Mode: Uses DOM + visual analysis","clearCache":"Clear Cache","cachedAction":"Cached: {actionName}","noCache":"No cached result. Run the step to create one.","disableCacheLabel":"Disable Cache","disableCacheInfo":"When enabled, the step will use AI to dynamically locate elements instead of cached selectors. Runs with cached selectors first, then falls back to AI if cache fails. This is useful when page layout changes frequently.","pureVisionInfo":"When enabled, the step uses only visual (screenshot) analysis without DOM inspection. Useful for canvas-based or non-standard UI elements.","switchType":"Action Type","usingJsCode":"JS Execution","usingJsCodeInfo":"When enabled, the assertion uses a JavaScript Playwright expect expression. Runs with JS first, then falls back to AI if JS fails. When disabled, it uses AI to verify conditions with natural language."},"actionEditor":{"selectActionType":"Select an action type from the dropdown above...","enterAssertion":"Enter assertion description...","functionModal":"Function will be configured via modal...","loginModal":"Login credentials will be configured via modal...","emailModal":"Email extraction will be configured via modal...","waitCondition":"Wait condition will be configured below...","enterAction":"Enter action description...","clickToAdd":"Click to add description"},"newStepEditor":{"loadingDetails":"Loading test case details...","agentCouldNotComplete":"Agent Could Not Complete","convertingFormat":"Converting Format","dismissWarning":"Dismiss Warning"},"actionWithSwitch":{"aiAction":"AI Action","action":"Action","switchToRegular":"Switch to regular action","switchToAi":"Switch to AI action"},"debugStatusIcon":{"skipped":"Skipped","streaming":"Streaming...","executing":"Executing...","executionSuccessful":"Execution successful","executionFailed":"Execution failed","nextStatement":"Next statement to be executed","convertedToAi":"Statement was converted to AI mode for successful execution"},"conditionInput":{"placeholder":"Enter condition expression...","disabled":"Disabled","clickToAddCondition":"Click to add condition"},"environmentConfigForm":{"testAccount":"Test Account","setAsDefault":"Set as default environment for Test Editor","setAsDefaultDescription":"This environment will be used as the default when editing the test steps.","hooksDescription":"Templates that run before/after test execution"},"latestRun":{"notAvailable":"N/A","invalidDate":"Invalid date","seconds":"{totalSeconds} seconds","pending":"Pending","latestResult":"Latest Result","viewRunDetails":"View run details (#{id})","result":"Result","startTime":"Start Time","endTime":"End Time","duration":"Duration","environment":"Environment","default":"Default"},"resizableEditor":{"editor":"Editor","preview":"Preview","clickToExpand":"Click to expand","clickToCollapse":"Click to collapse","dragToResize":"Drag to resize"},"statementWrapper":{"skipped":"Skipped","failed":"Failed","passed":"Passed","addedByAiFix":" · Added by AI fix","modifiedByAiFix":" · Modified by AI fix","movedByAiFix":" · Moved by AI fix","autoHealed":" · Auto healed","showingHealed":"Showing healed action step. Click to switch back to original.","showingOriginal":"Showing original action step. Click to switch to healed.","added":"Added","original":"Original","modified":"Modified","moved":"Moved","draggingDisabled":"Dragging disabled during debugging","dragToReorder":"Drag to reorder","rollbackToStatement":"Rollback to this statement","skipToStatement":"Skip to this statement","executeStatement":"Execute this statement","executeUntilStatement":"Execute until this statement.","executeThisStepDescription":"Executes this step.","executeThisStepItem1":"This will execute the step itself.","executeThisStepItem2":"Use this to quickly test a specific part of the test flow.","runUntilThisStep":"Run Until This Step","runUntilThisStepDescription":"Runs the test flow until this step is executed.","runUntilThisStepItem1":"This will not execute the step itself.","runUntilThisStepItem2":"Use this to quickly test a specific part of the test flow.","currentStatement":"This is the current statement.","editStatement":"Edit Statement","duplicate":"Duplicate","delete":"Delete","actionsLabel":"Actions","draft":"Draft","action":"Action","assertion":"Assertion","code":"Code","function":"Function","uploadFile":"Upload file","extract":"Extract","waitUntil":"Wait Until","group":"Group","template":"Template","extractEmailContent":"Extract Email Content","controlFlows":"Control Flows","ifElse":"If/Else","loop":"Loop","draftTooltip":"A Draft is a flexible statement that converts to Action or Group after execution. Use this when you're not sure if your instruction will need one or multiple steps. After execution, it automatically becomes an Action (single step) or Group (multiple steps) based on what the AI produces. (Ctrl+Alt+B)","draftInstruction1":"A Draft is a flexible statement that converts after execution.","draftInstruction2":"If the AI produces one action, it becomes an Action.","draftInstruction3":"If the AI produces multiple actions, it becomes a Group.","draftInstruction4":"Use this when you're not sure how many steps your instruction will need.","actionTooltip":"An Action performs interactions with the page using natural language descriptions. Examples: \\"Click the submit button\\", \\"Fill in the email field with user@example.com\\", \\"Select California from the state dropdown\\". The AI agent interprets your description and executes the appropriate browser action. (Ctrl+Alt+A)","actionInstruction1":"An Action performs interactions with the page using natural language descriptions.","actionInstruction2":"The AI agent interprets your description and executes the appropriate browser action.","actionInstruction3":"Examples: \\"Click the first search result\\", \\"Scroll to the reviews section\\", \\"Wait for the page to load\\"","assertionTooltip":"An Assertion verifies that something on the page matches your expectations. Examples: \\"The page title should contain Welcome\\", \\"The error message should be visible\\", \\"The cart total should be $99.99\\". Tests will fail if assertions are not met. (Ctrl+Alt+T)","assertionInstruction1":"An Assertion verifies that something on the page matches your expectations.","assertionInstruction2":"Tests will fail if assertions are not met.","assertionInstruction3":"Examples: \\"The page title should contain Welcome\\", \\"The error message should be visible\\", \\"The cart total should be $99.99\\"","editInstruction1":"Edit this statement's configuration, description, or parameters.","editInstruction2":"For actions and assertions, you can modify the natural language description.","editInstruction3":"For code blocks, edit the JavaScript directly.","duplicateTooltip":"Duplicate this statement and all its contents. Useful for creating similar actions with minor variations or repeating patterns. The copy will be inserted immediately after this statement.","duplicateInstruction1":"Duplicate this statement and all its contents.","duplicateInstruction2":"Useful for creating similar actions with minor variations or repeating patterns.","duplicateInstruction3":"The copy will be inserted immediately after this statement.","deleteTooltip":"Delete this statement permanently. For containers like Steps or If/Else blocks, this will also delete all nested statements. Use Ctrl+Alt+D for quick deletion. (Ctrl+Alt+D)","deleteInstruction1":"Permanently removes this statement from the test case.","deleteInstruction2":"For containers like Steps or If/Else blocks, this will also delete all nested statements.","deleteInstruction3":"Use Ctrl+Alt+D for quick deletion.","codeTooltip":"Code blocks execute custom JavaScript directly in the browser context. Use for complex logic, data manipulation, or operations not easily expressed in natural language. Examples: calculating values, parsing JSON, setting cookies, or interacting with browser APIs. Code has access to the page object and all Playwright APIs. (Ctrl+Alt+C)","codeInstruction1":"Code blocks execute custom JavaScript directly in the browser context.","codeInstruction2":"Use for complex logic, data manipulation, or operations not easily expressed in natural language.","codeInstruction3":"The code has access to the page object and can use await for async operations.","codeInstruction4":"Examples: Calculate values, parse JSON, set cookies, or interact with browser APIs.","functionTooltip":"Functions are reusable test components that accept parameters. Use them to avoid duplicating common sequences like login flows, form submissions, or navigation patterns. Example: A \\"Login\\" function with username and password parameters can be reused across multiple tests. (Ctrl+Alt+F)","functionInstruction1":"Functions are reusable test components that accept parameters.","functionInstruction2":"Use them to avoid duplicating common sequences like login flows, form submissions, or navigation patterns.","functionInstruction3":"Examples: A \\"Login\\" function with username and password parameters can be reused across multiple tests.","uploadFileTooltip":"Upload File actions attach files from your Test Data library to file input elements on the page. First upload files in the Test Data section, then select them here. Useful for testing file uploads, document processing, or image submissions. The action automatically handles file input elements and drag-and-drop zones. (Ctrl+Alt+U)","uploadFileInstruction1":"Upload File actions attach files from your Test Data library to file input elements on the page.","uploadFileInstruction2":"First upload files in the Test Data section, then select them here.","uploadFileInstruction3":"Useful for testing file uploads, document processing, or image submissions.","uploadFileInstruction4":"The action automatically handles file input elements and drag-and-drop zones.","extractTooltip":"Extract actions capture content from the page and save it to variables for later use. Examples: \\"Extract the order confirmation number and save to orderNumber\\", \\"Extract the user ID from the profile page and save to userId\\". These variables can be referenced in subsequent actions using $variableName syntax. (Ctrl+Alt+E)","extractInstruction1":"Extract actions capture content from the page and save it to variables for later use.","extractInstruction2":"These variables can be referenced in subsequent actions using $variableName syntax.","extractInstruction3":"Examples: \\"Extract the order confirmation number and save to orderNumber\\", \\"Extract the user ID from the profile page and save to userId\\".","waitUntilTooltip":"Wait for a specific condition to be met before continuing. Use natural language to describe what to wait for, like \\"The loading spinner disappears\\" or \\"The success message appears\\". Set a maximum timeout to prevent tests from hanging. (Ctrl+Alt+W)","waitUntilInstruction1":"Wait for a specific condition to be met before continuing.","waitUntilInstruction2":"Use natural language to describe what to wait for.","waitUntilInstruction3":"Examples: \\"The loading spinner disappears\\", \\"The success message appears\\".","waitUntilInstruction4":"Set a maximum timeout to prevent tests from hanging.","groupTooltip":"Groups are logical containers that organize related actions together. Use them to structure your test into meaningful sections like \\"User Registration\\", \\"Checkout Process\\", or \\"Search and Filter\\". Groups can be collapsed/expanded and help with test readability and maintenance. (Ctrl+Alt+G)","groupInstruction1":"Groups are logical containers that organize related actions together.","groupInstruction2":"Use them to structure your test into meaningful sections like \\"User Registration\\", \\"Checkout Process\\", or \\"Search and Filter\\".","groupInstruction3":"Groups can be collapsed/expanded and help with test readability and maintenance.","templateTooltip":"Templates are pre-defined step groups. Convert this statement to a template reference, then select a template to auto-populate common test patterns like login, navigation, or form submission. (Ctrl+Alt+R)","templateInstruction1":"Templates reference pre-defined step groups for common test patterns.","templateInstruction2":"After conversion, select a template to auto-populate actions.","templateInstruction3":"Examples: login flow, navigation, form submission, data verification.","templateInstruction4":"Helps maintain consistency across tests and reduces duplication.","extractEmailContentTooltip":"Extract specific content from emails like verification codes, activation links, or custom data. Configure filters to target emails from specific senders, with specific subjects, or containing certain text. The extracted content is automatically saved as a variable for use in subsequent test steps.","extractEmailContentInstruction1":"Extract specific content from emails like verification codes or activation links.","extractEmailContentInstruction2":"Configure filters to target emails from specific senders or with specific subjects.","extractEmailContentInstruction3":"Set custom prompts to guide the extraction process.","extractEmailContentInstruction4":"Extracted content is automatically saved as a variable for use in subsequent steps.","ifElseTooltip":"If/Else statements execute different actions based on conditions. The condition can be JavaScript code or natural language. Example: \\"If the user is logged in\\" then perform checkout actions, else show login form. Useful for handling different states, A/B tests, or dynamic content. (Ctrl+Alt+I)","ifElseInstruction1":"If/Else statements execute different actions based on conditions.","ifElseInstruction2":"The condition can be JavaScript code or natural language.","ifElseInstruction3":"Examples: \\"If the user is logged in\\" then perform checkout actions, else show login form.","loopTooltip":"While loops repeat a set of actions as long as a condition is true. Examples: \\"While there are more pages\\" click next and extract data, \\"While the loading spinner is visible\\" wait. Use for pagination, polling for changes, or processing lists of unknown length. Include a maximum iteration limit to prevent infinite loops. (Ctrl+Alt+L)","loopInstruction1":"While loops repeat a set of actions as long as a condition is true.","loopInstruction2":"The condition is checked before each iteration.","loopInstruction3":"Examples: \\"While there are more pages\\" click next and extract data, \\"While the loading spinner is visible\\" wait."},"stepStatement":{"groupActions":"Group Actions","clearAll":"Clear All","clearAllTooltip":"Remove all statements from this step container. This action cannot be undone.","clearAllItem1":"Remove all statements from this step container.","clearAllItem2":"This action cannot be undone.","saveAsTemplateTooltip":"Save this group as a template that can be reused in other test cases.","saveAsTemplateItem1":"Save this group as a template.","saveAsTemplateItem2":"The template can be used in other test cases.","saveAsTemplateItem3":"Current group will be converted to reference the new template."},"createForm":{"titleLabel":"Title","titlePlaceholder":"Enter test case title","showLess":"Show Less","showMore":"Show More","startingUrlLabel":"Starting URL","testAccountLabel":"Test Account","disableAutoLogin":"Disable auto login","targetPlatformLabel":"Target Platform and Device","selectSpecificDevice":"Select specific device","loadingDevices":"Loading devices...","selectAndroidDevice":"Select Android device","iosComingSoon":"iOS device selection coming soon","nativeMobileTesting":"Native mobile app testing via Appium","deviceOptimized":"Test will be optimized for the selected device viewport and characteristics","folderLabel":"Folder","folderOptional":"(optional)","folderPlaceholder":"Select a folder (leave empty for root)","folderHint":"Test case will be created in the selected folder","testCreationMode":"Test Creation Mode","aiGenerate":"AI Generate","aiGenerateDescription":"AI automatically generates test cases","aiImport":"AI Import","aiImportDescription":"Import test cases via YAML upload","single":"Single","batch":"Batch","goalLabel":"Goal","goalOptional":"(optional)","goalPlaceholder":"Describe what you want to test. For example: 'Login to the application and verify the dashboard is displayed'. Or Leave empty to use the no-code editor...","goalHint":"With a goal, AI generates test steps automatically. Without a goal, use the agentic no-code editor to build steps.","testFlowYamlLabel":"Test Flow YAML","testFlowYamlRequired":"(required)","testFlowYamlHint":"Paste exported test case YAML. AI will import and structure the test flow automatically.","testFlowYamlPlaceholder":"Paste exported test case YAML. For example:\\n\\ngoal: Verify user can log in and see dashboard\\nurl: https://example.com\\nstatements:\\n - Navigate to https://example.com/login\\n - Enter \\"test@example.com\\" in the email field\\n - Enter \\"Password123!\\" in the password field\\n - Click the \\"Sign in\\" button\\n - VERIFY: Dashboard is visible\\n\\nOr paste a full exported YAML from an existing test case.","yamlRequired":"Please upload a valid YAML file with test cases","testFlowYamlContentRequired":"Test flow YAML is required","csvRequired":"Please upload a valid CSV file with test cases","modifyTest":"Modify Test","saveTestCase":"Save Test Case","createWithCopilot":"Create with Copilot","creating":"Creating...","creatingCount":"Creating {count} Test Cases...","createCount":"Create {count} Test Cases","createTestCases":"Create Test Cases","createTestCase":"Create Test Case","createNewTestCase":"Create New Test Case","failedToCreateTestCase":"Failed to create test case","retryParamsUnavailable":"Cannot retry: upload parameters not available","generatingTestCases":"Generating test cases...","generatingTestCasesSubText":"Please wait while we generate your test cases. You will be redirected to the test cases list when complete."},"createCodeForm":{"createNewTestCase":"Create New Test Case","agentMode":"Agent Mode","titleLabel":"Title","titlePlaceholder":"Enter test case title","testAccountLabel":"Test Account","setupTest":"Setup Test","teardownTest":"Teardown Test","saveTestCase":"Save Test Case"},"generalSettings":{"settingsTitle":"Settings","disableAutoLogin":"Disable Auto Login","disableAutoLoginTooltip":"When enabled, the test will not automatically log in using the selected environment.","autoDismissModal":"Auto Dismiss Modal","autoDismissModalTooltip":"When enabled, the test will automatically dismiss modals (like cookie consent) during self-healing.","autoFix":"Auto Fix","autoFixTooltip":"Override the organization default for this test case. When enabled, AI will automatically analyze and fix test failures.","autoFixDefault":"Default ({state})","autoFixOn":"On","autoFixOff":"Off","autoFixStateOn":"On","autoFixStateOff":"Off","targetDevice":"Target Device","browserLocale":"Browser Locale","browserLocaleTooltip":"Override the browser's language and timezone for this test. Leave blank to use the browser default.","language":"Language","languagePlaceholder":"Default (en-US)","timezone":"Timezone","timezonePlaceholder":"Default (America/Los_Angeles)","browserMedia":"Browser Media","browserMediaTooltip":"Enables fake camera/microphone + auto-accept media prompts for Chromium. Other browsers ignore these settings.","enableCamera":"Enable Camera","enableMicrophone":"Enable Microphone","fileIdNameNotLoaded":"FILE-{id} (name not loaded)","selectAudioFile":"Select audio file for microphone","audioFileHint":"Audio file from test data to use for fake microphone capture","selectAudioFileModalTitle":"Select Audio File for Microphone","noAudioFiles":"No audio files (.wav or .mp3) found in test data. Upload audio files to use them as microphone input.","browserExtension":"Browser Extension","browserExtensionTooltip":"Loads a Chrome extension from test data (.crx or .zip). Only supported in Chromium and headed mode.","enableExtension":"Enable Extension","selectExtensionFile":"Select extension file","extensionFileHint":"Extension package from test data (.crx or .zip)","selectExtensionFileModalTitle":"Select Extension File","noExtensionFiles":"No extension files (.crx or .zip) found in test data. Upload an extension package to use it.","extraHeaders":"Extra HTTP Headers","extraHeadersTooltip":"Add custom HTTP headers sent with every browser request (e.g., authorization tokens, feature flags). Headers are sent in plain text.","extraHeadersAddButton":"Add Header","extraHeadersNamePlaceholder":"Header name","extraHeadersValuePlaceholder":"Header value","extraHeadersColumnName":"Name","extraHeadersColumnValue":"Value","extraHeadersNameRequired":"Header name is required","extraHeadersNameInvalid":"Invalid header name — use letters, digits, hyphens, or underscores only","extraHeadersNameDuplicate":"Header name already exists","environmentConfigurations":"Environment Configurations"},"environmentSelection":{"environment":"Environment","overrideUrl":"Override URL (Optional)","overrideUrlDefaultPrefix":"Default: {url}","overrideUrlPlaceholder":"Enter custom URL","overrideTestAccount":"Override Test Account (Optional)","overrideTestAccountDescription":"By default, the test account configured for each test case's environment will be used","overrideVariables":"Override Variables (Optional)","overrideVariablesDescription":"Variables defined here will override environment variables for this run","accountsSelectedInfo":"{count} accounts selected. Each account will run separately, creating {count} test run{plural} per test case.","addVariable":"Add Variable","keyPlaceholder":"Key","valuePlaceholder":"Value","removeVariable":"Remove variable"},"environmentConfigsList":{"unknownEnvironment":"Unknown Environment","notConfigured":"Not configured","specificAccountsNoneSelected":"Specific accounts (none selected)","unknown":"Unknown","testEditorEnvironmentTooltip":"This environment is used as the default when editing the test steps.","testEditorEnvironment":"Test Editor Environment","setAsStepEditorEnv":"Set as Step Editor Env","startingUrl":"Starting URL","testAccount":"Test Account","hooks":"Hooks","addEnvironmentConfig":"Add Environment Config","allEnvironmentsConfigured":"All environments have been configured","editEnvironmentConfig":"Edit Environment Config","updateConfig":"Update Config","addConfig":"Add Config"},"explorer":{"loadingTestCases":"Loading test cases","loadingSubText":"This won't take long","emptyTitle":"Tests","emptyDescription1":"Tests are automated checks that validate how your product works, from login flows to complex user journeys.","emptyDescription2":"Each test is a sequence of actions and verifications, powered by AI or written step by step, so you can catch issues before users do.","createFirstTest":"Create your first test","documentation":"Documentation","newRootFolder":"New Root Folder","columnName":"Name","columnStatus":"Status","columnPlatform":"Platform","columnLatestResult":"Latest Result","columnCreatedBy":"Created By","filterStatus":"Status","filterLabels":"Labels","filterCreatedBy":"Created By","filterDevice":"Device","filterEnvironment":"Environment","filterTestAccount":"Test Account","filterTestAccountDescription":"Shows test cases where at least one environment config includes the selected test account.","filterLatestResult":"Latest Result","filterHasAutoFix":"Auto Fix","filterOptionActive":"Active","filterOptionDraft":"Draft","filterOptionPassed":"Passed","filterOptionFailed":"Failed","filterOptionNotStarted":"Not Started","filterOptionHasAutoFix":"Has Auto Fix","filterActive":"Filter Active","filterAutoFix":"Filter Auto Fix","filterDraft":"Filter Draft","filterFailed":"Filter Failed","filterNotStarted":"Filter Not Started","filterPassed":"Filter Passed"},"filterBar":{"statusDisplay":"Status","labelsDisplay":"Labels","statusMore":"{first} + {count} more","labelMore":"{first} + {count} more","devicesPlaceholder":"Devices","clearAllFilters":"Clear all filters","clearShort":"Clear","filterActive":"Filter Active","filterDraft":"Filter Draft"},"liveView":{"liveViewTab":"Live View","videoTab":"Video","previewsTab":"Previews","previewsWithCount":"Previews ({count})","deviceTooltip":"Device: {name}","reload":"Reload","reloading":"Reloading...","exitFullScreen":"Exit full screen","fullScreen":"Full screen","liveViewNotAvailable":"Live View Not Available","liveViewNotAvailableDesc":"Live test preview is not available in Code mode. Switch to Agent mode in Settings to use this feature.","testLiveView":"Test Live View","waitingForGeneration":"Waiting for generation to start...","initializingDebug":"Initializing debug session...","clickToStart":"Click the \\"Start\\" or \\"Run\\" button in the left panel to start the browser and see automation in real-time.","noVideoRecording":"No video recording available","generationScreenshot":"Generation screenshot","waitingForScreenshot":"Waiting for generation screenshot...","livePreviewTitle":"Live Preview Title"},"userSelection":{"noneOption":"None","anyOption":"Any","unknownAccount":"Unknown account","selectedAccounts":"{count} selected accounts","searchPlaceholder":"Search accounts...","createdLabel":"Created: {date}"},"viewRecordingModal":{"title":"Test Recording: {title}","noRecordingAvailable":"No recording available for this test case","failedToLoad":"Failed to load recording","noVideoRecording":"No video recording available","browserNotSupported":"Your browser does not support the video tag."},"simpleList":{"searchPlaceholder":"Search test cases...","columnId":"ID","columnName":"Name","columnUpdated":"Updated"},"sidebar":{"testCaseInfo":"Test Case Info","createdAt":"Created At","lastUpdated":"Last Updated","createdBy":"Created By","updatedBy":"Updated By","targetDevice":"Target Device","actions":"Actions","extractKnowledge":"Extract Knowledge","extractingKnowledge":"Extracting Knowledge...","knowledgeExtractedMessage":"Knowledge has been successfully extracted from this test case","failedToExtractKnowledge":"Failed to extract knowledge","failedToExtractKnowledgeFromTestCase":"Failed to extract knowledge from test case","notAvailable":"N/A"},"statementChanges":{"added":"Added ({count})","deleted":"Deleted ({count})","modified":"Modified ({count})","moved":"Moved ({count})"},"assertions":{"placeholder":"Enter assertion description...","emptyText":"Click to add assertion"},"basicAction":{"placeholder":"Enter action description...","emptyText":"Click to add description","findElement":"Find element"},"infoView":{"variablesTab":"Variables","consoleTab":"Logs","noVariables":"No variables available. Start running your test to see variables here.","noConsoleOutput":"No log output available. Logs will appear here during test execution.","clickToExpand":"Click to expand","dragToResize":"Drag to resize"},"resultPopup":{"latestRunResult":"Latest Run Result","status":"Status:","started":"Started:","ended":"Ended:","duration":"Duration:","environment":"Environment:","summary":"Summary:","notStarted":"Not Started","passedWithAutofix":"Passed with autofix"},"testDataSelector":{"selectTestData":"Select Test Data","needToUpload":"Need to upload test data files?","goToSettings":"Go to Settings → Test Data","selectTestDataModalTitle":"Select Test Data","confirmUploadTitle":"Confirm Upload Test Data","confirmUploadDesc":"Upload file {filename} and attach to the test.","done":"Done","cancel":"Cancel","confirm":"Confirm"},"testDataSelectionList":{"searchPlaceholder":"Search test data file name...","columnId":"ID","columnName":"Name","columnLastUpdated":"Last Updated","done":"Done"},"templateSelector":{"placeholder":"Select a template"},"simpleExplorer":{"searchPlaceholder":"Search test cases...","loadingTestCases":"Loading test cases...","selectedCount":"{count} selected","columnName":"Name","columnStatus":"Status","columnCreatedBy":"Created By"},"layout":{"overviewTab":"Overview","settingsTab":"Settings","historyTab":"History","runRecordsTab":"Run Records","codeTab":"Code","playgroundTab":"UX Playground","autofixAvailable":"An autofix is available for this test case.","viewResult":"View result","closeDetails":"Close details"},"runRecordsTab":{"loadError":"Failed to load run records. Please try again.","empty":"No run records yet","emptyHint":"Run records will appear here after the test case has been executed.","columnRunId":"Run ID","columnResult":"Result","columnStarted":"Started","columnDuration":"Duration","columnEnvironment":"Environment","paginationInfo":"{total} records · Page {page} of {totalPages}"},"diffViewer":{"modalTitle":"Test Flow Changes"},"flowEditor":{"teardownTitle":"Teardown","removeTeardown":"Remove","addTeardown":"Add Teardown"},"plansSection":{"schedulesTitle":"Schedules","noSchedulesLinked":"No schedules linked","viaSuiteBadge":"Via Suite"},"suitesSection":{"testSuitesTitle":"Test Suites","noTestSuitesLinked":"No test suites linked"},"csvSection":{"uploadCsvFile":"Upload CSV File","downloadTemplate":"Download Template","selectCsvFile":"Select CSV file","csvFormatTitle":"CSV Format Requirements","formatDescription":"Your CSV file must contain \\"title\\" and \\"goal\\" columns. The goal column should contain a description of what you want to test. AI will automatically generate test steps based on each goal. Click \\"Download Template\\" above to get a sample file with the correct format.","exampleFormat":"Example format (use quotes for fields containing commas or newlines):","exampleCsv":"title,goal\\nLogin Test,\\"Test login with valid credentials\\"\\nCheckout Test,\\"Test checkout process with multiple items\\"","tipCommasAndNewlines":"Tip: Handling commas and newlines: Wrap fields containing commas or newlines in double quotes","tipIncludingQuotes":"Tip: Including quotes: Use double quotes (\\"\\") to include actual quotes in text","tipGoalFormat":"Tip: Goal format: Provide a clear description of what you want to test (e.g., \\"Test login functionality\\" or \\"Verify checkout process\\")","parsingCsv":"Parsing CSV file...","previewCount":"Preview ({count} test case{plural})","columnTitle":"Title","columnGoal":"Goal","columnTestFlow":"Test Flow","errors":{"fileTooLarge":"File size too large. Please upload a file smaller than 5MB","emptyFile":"CSV file is empty. Please upload a file with test case data","missingHeaderOrData":"CSV file must contain at least a header row and one data row. Please check your file format","missingRequiredColumns":"CSV file must contain \\"title\\" and \\"goal\\" columns. Found columns: {columns}","rowMissingRequiredColumns":"Row {row}: Missing required columns (expected at least {minColumns} columns)","rowMissingTitle":"Row {row}: Missing title","rowMissingGoal":"Row {row}: Missing goal","rowTitleTooLong":"Row {row}: Title too long (max 200 characters)","rowGoalTooLong":"Row {row}: Goal too long (max 2000 characters)","noValidRowsWithDetails":"No valid test cases found. Errors:\\n{errors}{more}","noValidRows":"No valid test cases found in CSV file. Please check your file format","tooManyRows":"Too many test cases. Please limit to 100 test cases per upload","parseFailed":"Failed to parse CSV file. Please check the file format and try again","readFailed":"Failed to read CSV file. Please try again or use a different file","invalidExtension":"Please upload a CSV file"}},"yamlSection":{"uploadYamlFile":"Upload YAML File","downloadTemplate":"Download Template","selectYamlFile":"Select YAML file (.yaml or .yml)","yamlFormatTitle":"YAML Format Requirements","parsingYaml":"Parsing YAML file...","previewCount":"Preview ({count} test case{plural})","columnTitle":"Title","columnGoal":"Goal"},"screencast":{"connecting":"Connecting to screencast...","failedToConnect":"Failed to connect to screencast","disconnected":"Screencast disconnected","browserScreencast":"Browser Screencast"},"multiPageViewer":{"noPagesOpen":"No pages open","connectingToBrowser":"Connecting to browser...","closeInspector":"Close Inspector","openInspector":"Open Inspector","pickingLocator":"Picking locator...","cancelLocatorPicking":"Cancel locator picking","failedToConstructUrl":"Failed to construct DevTools URL","recording":"Recording","record":"Record","clickToStopRecording":"Click to Stop Recording","clickToStartRecording":"Click to Start Recording","picking":"Picking","pick":"Pick","clickToStopPicking":"Click to Stop Picking Element","clickToStartPicking":"Click to Start Picking Element"},"agentFixDiffViewer":{"diffSummaryTitle":"Diff Summary","originalTestFlow":"Original Test Flow","agentFixedTestFlow":"Agent-Fixed Test Flow","changedCount":"{count} changed","statementsCount":"{count} statements","changeLabel":"Change","noChanges":"No changes","noStatements":"No statements to display","changeDetails":"Change Details","deletedInModified":"Deleted in modified","addedInModified":"Added in modified"},"videoPreview":{"creatingTestCase":"Creating Test Case","recordingWillAppearSoon":"Test recording will appear here shortly","testRecordingPreview":"Test Recording Preview","recordingWillAppear":"Test recording will appear here","browserNotSupported":"Your browser does not support the video tag."},"imageViewer":{"noImagesAvailable":"No Images Available","noImagesDesc":"Images will appear here when available from test execution or debugging."},"actionGenerationDebugView":{"tabSystemPrompt":"System Prompt","tabUserPrompt":"User Prompt","tabReasoningContent":"Reasoning Content","tabRawResponse":"Raw Response","tabKnowledge":"Knowledge ({count})","tabCuaInput":"CUA Input","tabCuaResponse":"CUA Response"},"labels":{"labelsTitle":"Labels"},"csvImportProgress":{"backgroundInfo":"You can close this window at any time. The import process will continue in the background.","columnTitle":"Title","columnStatus":"Status","statusPending":"Pending","statusCreating":"Creating","statusGenerating":"Generating","statusCompleted":"Completed","statusError":"Error","goToTestCases":"Go To Test Cases"},"historyViewer":{"title":"Test Flow History Version","updatedAt":"{name} updated at {timeAgo}"},"generationView":{"queued":"Queued","regenerating":"({count})Regenerating a better test","generating":"Generating"}}`);
|
|
200737
200626
|
const TestSuites = { "exportingTitle": "Exporting Test Suite", "exportedSuccessfully": "Test suite exported successfully", "failedToExport": "Failed to export test suite", "urlCopied": "Test suite URL copied to clipboard", "failedToCopyUrl": "Failed to copy URL", "createdSuccessfully": "Test suite created successfully", "failedToCreate": "Failed to create test suite", "failedToUpdateTitle": "Failed to update test suite title", "deleteTitle": "Delete test suite?", "properties": "Properties", "copyTestSuiteUrl": "Copy test suite URL", "totalTests": "Total Tests", "activeTests": "Active Tests", "inactiveTests": "Inactive Tests", "lastRun": "Last Run", "never": "Never", "selectedCount": "{count} selected", "latestRun": "Latest Run", "viewRunDetails": "View run details", "result": "Result", "startTime": "Start Time", "endTime": "End Time", "duration": "Duration", "totalPassed": "Total Passed", "totalFailed": "Total Failed", "invalidDate": "Invalid date", "notAvailable": "N/A", "testSuiteTitle": "Test Suite Title", "enterTestSuiteTitle": "Enter test suite title", "description": "Description", "enterTestSuiteDescription": "Enter a description for the test suite", "addTestCases": "Add Test Cases", "testCases": "Test Cases", "selectTestCasesToAddToSuite": "Select test cases to add to this test suite", "addSelectedWithCount": "Add Selected ({count})", "suiteId": "SUITE ID", "title": "Title", "latestResult": "Latest Result", "createdBy": "Created By", "testsCount": "{count} tests", "testsFailedCount": "{count} {count, plural, one {Test} other {Tests}} Failed", "notStarted": "Not Started", "runTestSuite": "Run Test Suite", "deleteSelected": "Delete Selected", "testSuitesTitle": "Test Suites", "emptyDescriptionLine1": "Test Suites let you group related test cases together, so you can run, track, and manage them as a single unit.", "emptyDescriptionLine2": "Use suites to organize tests by feature, workflow, or release, and easily include them in schedules for regular automated runs.", "createFirstTestSuite": "Create your first test suite", "documentation": "Documentation", "testSuiteSingular": "test suite", "removeFromSuite": "Remove from suite", "githubActionsIntegration": "GitHub Actions Integration", "githubActionsIntegrationDescription": "Configure your GitHub workflow to automatically run this test suite. When a run completes, notifications will be sent to the channels configured below.", "viewSetupGuide": "View setup guide", "slackNotifications": "Slack Notifications", "suiteSlackNotificationsDescription": "Receive test results in Slack channels when this test suite is run via GitHub Actions. Select which test outcomes trigger notifications.", "receiveResultsInSlackChannels": "Receive test results in Slack channels,", "oneTimeSetup": "one-time setup", "requiredSuffix": "required.", "addNewChannels": "Add new channels", "webhookNotifications": "Webhook Notifications", "suiteWebhookNotificationsDescription": "Send test results to webhook endpoints when this test suite is run via GitHub Actions. Configure integrations with external systems.", "sendResultsToWebhookEndpoints": "Send test results to webhook endpoints,", "manageWebhookEndpoints": "Manage webhook endpoints", "testSuiteDetails": "Test Suite Details", "created": "Created", "lastUpdated": "Last Updated", "byUser": "by {user}", "latestRunResult": "Latest Run Result", "viewDetails": "View Details", "passed": "Passed", "failed": "Failed", "successRate": "Success Rate", "noTestRunsYet": "No test runs yet. Run this test suite to see results here.", "createTestSuite": "Create Test Suite", "selectTestCasesToIncludeInSuite": "Select test cases to include in this test suite", "latest": "Latest", "untitledTestSuite": "Untitled Test Suite", "failedToLoadTestSuites": "Failed to load test suites", "failedToLoadTestCases": "Failed to load test cases", "testSuiteDeletedSuccessfully": "Test suite deleted successfully", "failedToDeleteTestSuite": "Failed to delete test suite", "testSuitesDeletedSuccessfully": "{count, plural, one {1 test suite deleted successfully} other {{count} test suites deleted successfully}}", "failedToDeleteSomeTestSuites": "Failed to delete some test suites", "deleteTestSuiteTitle": "Delete Test Suite", "deleteTestSuiteConfirmMessage": "Are you sure you want to delete this test suite? This action cannot be undone.", "deleteMultipleTestSuitesTitle": "Delete Multiple Test Suites", "deleteMultipleTestSuitesConfirmMessage": "Are you sure you want to delete {count} {count, plural, one {test suite} other {test suites}}? This action cannot be undone.", "failedToLoadTestSuiteData": "Failed to load test suite data", "returnToTestSuites": "Return to Test Suites", "removeSelectedTestsTitle": "Remove Selected Tests", "removeSelectedTestsConfirm": "Are you sure you want to remove selected tests from the suite? This action cannot be undone.", "remove": "Remove", "removeSelectedCount": "Remove Selected ({count})", "tabs": { "overview": "Overview", "ciAndNotifications": "CI & Notifications" } };
|
|
200738
200627
|
const Schedules = { "scheduleUpdatedTitle": "Schedule Updated", "scheduleUpdatedMessage": "Schedule has been updated successfully", "updateFailedTitle": "Update Failed", "createdSuccessfully": "Schedule created successfully", "failedToCreate": "Failed to create schedule. Please try again.", "titleRequired": "Please enter a title", "switchedToTestsSuitesMode": "Switched to Tests & Suites mode", "viewUpdatedSuccessfully": "View updated successfully", "failedToUpdate": "Failed to update", "scheduleStatusUpdated": "Schedule status updated", "failedToUpdateScheduleStatus": "Failed to update schedule status", "failedToSaveParameterSets": "Failed to save parameter sets", "failedToUpdateDefaultParameterSet": "Failed to update default parameter set", "failedToSaveDefaultVariables": "Failed to save default variables", "webhookEndpointDisabled": "This endpoint is disabled globally in Settings/Notifications", "environmentMismatchTooltip": "The environment of this schedule does not match some of its test cases.", "totalTestsCount": "{count} Total {count, plural, one {Test} other {Tests}}", "viewWithId": "View #{id}", "suiteCount": "{count} {count, plural, one {Suite} other {Suites}}", "scheduleMustBeActiveToRunInCloud": "Schedule must be Active to run in cloud", "runInCloud": "Run in Cloud", "properties": "Properties", "copyScheduleUrl": "Copy schedule URL", "created": "Created", "notAvailable": "N/A", "lastUpdated": "Last Updated", "description": "Description", "addScheduleDescription": "Add a schedule description...", "saving": "Saving...", "saved": "Saved", "failedToSave": "Failed to save", "addTestCases": "Add Test Cases", "loadingTestCases": "Loading test cases", "testCaseSelectedCount": "{count} {count, plural, one {test case} other {test cases}} selected", "addSelected": "Add Selected", "addTestSuites": "Add Test Suites", "testSuiteSelectedCount": "{count} {count, plural, one {test suite} other {test suites}} selected", "status": "Status", "changeStatus": "Change Status", "schedule": "Schedule", "schedId": "SCHED ID", "name": "Name", "totalTests": "Total Tests", "type": "Type", "environment": "Environment", "createdBy": "Created By", "testsCount": "{count} tests", "viewBased": "View Based", "manualSelection": "Manual Selection", "noUrlAvailable": "No URL available", "testPlanMustBeActiveToRun": "Test Plan must be Active to run", "deleteSchedulesTitle": "Delete {count} {count, plural, one {schedule} other {schedules}}?", "confirmDeleteSchedules": "Are you sure you want to delete {target}? This action cannot be undone.", "thisSchedule": "this schedule", "theseSchedules": "these schedules", "schedulesDeletedSuccessfully": "{count, plural, one {Schedule deleted successfully} other {Schedules deleted successfully}}", "failedToDeleteSchedules": "{count, plural, one {Failed to delete schedule} other {Failed to delete schedules}}", "deleteSelected": "Delete Selected", "deleteFailedTitle": "Failed to Delete Schedule", "unexpectedError": "An error occurred", "schedulesTitle": "Schedules", "emptyDescriptionLine1": "Schedules run your tests automatically on a recurring basis, so you can catch issues without manual runs.", "emptyDescriptionLine2": "A schedule can include individual tests or test suites and runs them in a selected environment at a set time.", "createFirstSchedule": "Create your first schedule", "documentation": "Documentation", "scheduleSingular": "schedule", "emailNotifications": "Email Notifications", "emailNotificationsDescription": "Send scheduled test results to email addresses when tests run on schedule. Select organization members or add custom email addresses.", "slackNotifications": "Slack Notifications", "slackNotificationsDescription": "Send scheduled test results to Slack channels when tests run on schedule. Select channels to receive notifications.", "receiveResultsInSlackChannels": "Receive test results in Slack channels,", "requiredSuffix": "required.", "addNewChannels": "Add new channels", "webhookNotifications": "Webhook Notifications", "webhookNotificationsDescription": "Send scheduled test results to webhook endpoints when tests run on schedule. Configure custom integrations with external systems.", "sendResultsToWebhookEndpoints": "Send test results to webhook endpoints,", "manageWebhookEndpoints": "Manage webhook endpoints", "addEmails": "Add emails", "receiveResultsInSelectedSlackChannels": "Receive test results in selected Slack channels.", "oneTimeSetup": "one-time setup", "emailAddressRequired": "Email address is required", "invalidEmailAddress": "Invalid email address", "emailAlreadyAdded": "This email is already added", "enterEmailAddress": "Enter email address", "add": "Add", "organizationMembersSubscribed": "Organization Members ({subscribed}/{total} subscribed)", "environmentMismatch": "Environment mismatch", "clickToEditParameterSets": "Click to edit parameter sets", "default": "Default", "parameterSetsCount": "{count} sets", "enabledParameterSetsCount": "{enabled} / {total} sets", "parameterSets": "Parameter Sets", "removeFromPlan": "Remove from Plan", "removeSelectedCount": "Remove Selected ({count})", "searchTestCases": "Search test cases...", "searchTestSuites": "Search test suites...", "removeTestCase": "Remove Test Case", "removeTestSuite": "Remove Test Suite", "removeFromScheduleConfirm": "Are you sure you want to remove this {itemType} from the schedule? This action cannot be undone.", "testCaseLower": "test case", "testSuiteLower": "test suite", "remove": "Remove", "parameterSetsTitle": "Parameter Sets - {title}", "failedToLoadTestCases": "Failed to load test cases", "selectEnvironment": "Select an environment", "overrideTestAccountOptional": "Override Test Account (Optional)", "overrideTestAccountDescription": "By default, the test account configured for each test case's environment will be used", "preflightTestOptional": "Preflight Test (Optional)", "preflightTestDescription": "Run this test case before dispatching main tests in this schedule.", "selectPreflightTestCase": "Select preflight test case", "clearPreflightTestCase": "Clear preflight test case", "startDateOptional": "Start Date (Optional)", "pickDateAndTime": "Pick date and time", "endDateOptional": "End Date (Optional)", "repeat": "Repeat", "cronTimezoneNotice": "Cron schedules are saved/executed in UTC. Your browser timezone is {browserTz}{browserTzAbbr} {browserOffset}.", "oneTestCaseSelected": "1 test case selected", "noTestCaseSelected": "No test case selected", "maxParallelRuns": "Max Parallel Runs", "maxParallelRunsDescription": "Limit how many tests run at the same time. When a test finishes, the next queued test starts automatically. Leave empty for no limit.", "maxParallelRunsPlaceholder": "No limit", "saveSchedule": "Save Schedule", "title": "Title", "enterScheduleTitle": "Enter schedule title", "enterScheduleDescription": "Enter schedule description", "testCasesCount": "Test Cases ({count})", "testSuitesCount": "Test Suites ({count})", "viewCount": "View ({count})", "viewSelectionMutuallyExclusive": "Selecting a view is mutually exclusive with test cases and suites - choosing one will clear the other.", "noPublicViewsAvailable": "No public views available. Create a public view first to use view-based schedules.", "searchViews": "Search views...", "viewWithName": "View: {name}", "itemsSelectedCount": "{count} {count, plural, one {item} other {items}} selected", "scheduleConfigured": "Schedule configured", "noScheduleSet": "No schedule set", "createSchedule": "Create Schedule", "basicInfo": "Basic Info", "enterDetails": "Enter details", "testSelection": "Test Selection", "selectTestsOrView": "Select tests or a view", "setUpExecutionSchedule": "Set up execution schedule", "creatingSchedule": "Creating schedule", "thisWontTakeLong": "This won't take long", "changeTestSource": "Change test source", "useAView": "Use a View", "useTestsAndSuites": "Use Tests & Suites", "switchToManualDescription": "Switch to manually managing test cases and suites. The current view association will be removed.", "testSource": "Test source", "testsResolvedCount": "({count} {count, plural, one {test} other {tests}} resolved)", "testsAndSuites": "Tests & Suites", "testSuites": "Test Suites", "start": "Start", "end": "End", "from": "From", "to": "To", "untitledTestPlan": "Untitled Test Plan", "flakyTestRate": "Flaky Test Rate", "averageDurations": "Average Durations", "allTimeStats": "All-time Stats", "latestRunResult": "Latest Run Result", "report": { "failedToLoadReportData": "Failed to load report data", "loadingReport": "Loading report", "fetchingTestRunData": "Fetching test run data and history...", "noTestRunsExecuted": "No test runs have been executed for this test plan yet.", "latestRunDescription": "Most recent test results with pass/fail distribution.", "flakyDescription": "Tests that initially failed but succeeded on retry.", "averageDurationDescription": "Test execution time metrics for test cases.", "allTimeDescription": "A high pass rate shows test stability, a low rate suggests issues.", "casesLabel": "{count} Cases", "testsLabel": "{count} Tests", "percentPassed": "{rate}% Passed", "percentFlaky": "{rate}% Flaky", "runNumber": "Run #{id}", "startedAt": "Started: {time}", "endedAt": "Ended: {time}", "durationWithValue": "Duration: {value}", "viewRunDetails": "View Run Details", "stable": "Stable", "flaky": "Flaky", "passed": "Passed", "failed": "Failed", "caseDuration": "Case Duration", "planDuration": "Plan Duration", "totalDuration": "Total Duration", "durationSeconds": "Duration (s)", "runResultsTrendTitle": "Run Results Trend Over Time", "runResultsTrendDescription": "Tracks pass/fail rates across {count} test runs. Growing red areas may indicate increasing flakiness, while consistent green shows test stability.", "testCaseHistory": "Test Case History", "flakyDefinitionPrefix": "A ", "flakyDefinitionSuffix": " test is one that initially fails but succeeds when retried in the same run. It indicates potential instability that should be addressed." }, "detailPage": { "loadingSchedule": "Loading schedule", "fetchingScheduleDetails": "Fetching schedule details...", "scheduleNotFound": "Schedule not found", "returnToSchedules": "Return to Schedules", "tabs": { "overview": "Overview", "tests": "Tests", "report": "Report", "notifications": "Notifications", "history": "History" } } };
|
|
200739
200628
|
const Functions = { "definitionTitle": "Definition", "reloadingFunctions": "Reloading Functions...", "tryItOutTitle": "Try it out", "reset": "Reset", "run": "Run", "changeStatus": "Change Status", "tabs": { "overview": "Overview", "usage": "Usage", "settings": "Settings", "editor": "Editor", "preview": "Preview", "dragToResize": "Drag to resize", "clickToExpand": "Click to expand", "clickToCollapse": "Click to collapse" }, "header": { "editFunctionTitle": "Edit {name} function" }, "createModal": { "title": "Create New Function", "nameLabel": "Name of function", "namePlaceholder": "my_function", "descriptionLabel": "Description", "descriptionPlaceholder": "Describe what this function does and how it should be used", "argumentsLabel": "Arguments", "argumentPlaceholder": "argumentName", "addNewArgument": "+ Add a new argument", "removeArgumentAriaLabel": "Remove argument", "creating": "Creating...", "functionNameRequired": "Function name is required", "functionNameSnakeCaseError": "Function name must use snake_case format: only lowercase letters, numbers, and underscores. No uppercase, hyphens, or spaces allowed.", "provideValidFunctionName": "Please provide a valid function name" }, "codeEditor": { "functionSignature": "Function Signature", "nameLabel": "Name:", "namePlaceholder": "my_function", "descriptionLabel": "Description:", "descriptionPlaceholder": "Function description", "parametersLabel": "Parameters:", "parameterPlaceholder": "param_name", "addParameter": "Add", "removeParameterAriaLabel": "Remove Parameter", "functionNameRequired": "Function name is required", "functionNameSnakeCaseError": "Use snake_case format: lowercase letters, numbers and underscores only" }, "list": { "funcId": "FUNC ID", "name": "Name", "description": "Description", "usedBy": "Used By", "status": "Status", "createdBy": "Created By", "created": "Created", "updated": "Updated", "deleteSelected": "Delete Selected", "deleteConfirmTitle": "Delete {count, plural, one {function} other {functions}}?", "deleteConfirmMessage": "Are you sure you want to delete {count} {count, plural, one {function} other {functions}}? This action cannot be undone.", "recordLabelFunction": "function" }, "emptyState": { "title": "Functions", "descriptionLine1": "Functions are reusable building blocks you can call from any test, from API requests to multi step workflows and data processing.", "descriptionLine2": "Write them once, use them everywhere. Functions run with full Playwright access and can store results in the test context, so your tests stay clean and consistent.", "createFirstFunction": "Create your first function", "documentation": "Documentation" }, "usageTab": { "id": "ID", "title": "Title", "recordLabelTestCase": "test case" }, "settings": { "pathMustStartWithSlash": "Path must start with /", "loadingFunctionDetails": "Loading function details...", "tryItOutSettings": "Try it out Settings", "disableAutoLogin": "Disable Auto Login", "environmentAndUrl": "Environment & URL", "testAccount": "Test Account" }, "createdSuccessfully": "Function created successfully", "failedToSave": "Failed to save function. Please try again.", "failedToLoadTestAccounts": "Failed to load test accounts", "settingsSavedSuccessfully": "Settings saved successfully", "failedToSaveSettings": "Failed to save settings", "page": { "deleteFunctionTitle": "Delete function?", "deleteFunctionConfirmMessage": "Are you sure you want to delete this function? This action cannot be undone.", "delete": "Delete", "cancel": "Cancel", "functionDeletedSuccessfully": "Function deleted successfully", "failedToDeleteFunction": "Failed to delete function", "functionNotFound": "Function not found", "copyName": "{name} (Copy)", "functionDuplicatedAs": 'Function duplicated as "{name} (Copy)"', "failedToDuplicateFunction": "Failed to duplicate function", "functionStatusUpdated": "Function status updated", "failedToUpdateFunctionStatus": "Failed to update function status", "failedToLoadFunctions": "Failed to load functions", "retry": "Retry", "testFunctionNotFound": "Test function not found", "returnToTestFunctions": "Return to Test Functions" } };
|
|
@@ -200821,4 +200710,4 @@ export {
|
|
|
200821
200710
|
We as W,
|
|
200822
200711
|
reactExports as r
|
|
200823
200712
|
};
|
|
200824
|
-
//# sourceMappingURL=index-
|
|
200713
|
+
//# sourceMappingURL=index-BEW7CdFm.js.map
|