{"id":13517,"date":"2025-11-28T16:21:05","date_gmt":"2025-11-28T09:21:05","guid":{"rendered":"https:\/\/labamu.co.id\/career\/quality-engineer-mid-level\/"},"modified":"2026-02-10T15:08:05","modified_gmt":"2026-02-10T08:08:05","slug":"quality-engineer-mid-level","status":"publish","type":"career","link":"https:\/\/labamu.co.id\/en\/career\/quality-engineer-mid-level\/","title":{"rendered":"Quality Engineer (Mid-Level)"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"13517\" class=\"elementor elementor-13517 elementor-13134\" data-elementor-post-type=\"career\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2e171c5e e-flex e-con-boxed e-con e-parent\" data-id=\"2e171c5e\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-194a0c3f e-con-full e-flex e-con e-child\" data-id=\"194a0c3f\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t<div class=\"elementor-element elementor-element-4d7b4a7c e-con-full e-flex elementor-invisible e-con e-child\" data-id=\"4d7b4a7c\" data-element_type=\"container\" data-e-type=\"container\" data-settings=\"{&quot;animation&quot;:&quot;fadeInLeft&quot;}\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b76bd0b elementor-widget elementor-widget-page-title\" data-id=\"b76bd0b\" data-element_type=\"widget\" data-e-type=\"widget\" data-settings=\"{&quot;align&quot;:&quot;left&quot;}\" data-widget_type=\"page-title.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\n\t\t<div class=\"hfe-page-title hfe-page-title-wrapper elementor-widget-heading\">\n\n\t\t\t\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">\n\t\t\t\t\t\t\t\t\n\t\t\t\tQuality Engineer (Mid-Level)  \n\t\t\t<\/h2 > \n\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-34a4717e elementor-widget elementor-widget-html\" data-id=\"34a4717e\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div class=\"career-meta\"><\/div><div id=\"career-detail\" class=\"career-detail-wrapper\"><\/div><style>.career-meta {\n    display: flex;\n    align-items: center;\n    font-family: \"Inter\", sans-serif;\n    font-size: 18px;\n    color: #fff; \/* ganti sesuai tema (misal #222 utk dark text) *\/\n    flex-wrap: wrap;\n  }\n  \n  .career-meta span {\n    display: inline-block;\n    margin-right: 8px;\n  }\n  \n  .separator {\n    opacity: 0.6;\n    margin: 0 8px;\n  }\n  \n  .posted-time {\n    margin-left: auto;\n    font-size: 13px;\n    opacity: 0.8;\n  }\n  \n  .btn-apply {\n    border: 1px solid #fff;\n    color: #fff;\n    padding: 12px 24px;\n    border-radius: 8px;\n    transition: 0.3s;\n    text-decoration: none;\n  }\n\n  .btn-apply:hover {\n    background: #fff;\n    color: #fff;\n  }\n  <\/style><script>document.addEventListener(\"DOMContentLoaded\", function () {\n  const pathParts = window.location.pathname.split(\"\/\").filter(Boolean);\n  const slug = pathParts[pathParts.length - 1];\n  const apiUrl = `\/wp-json\/wp\/v2\/career?slug=${slug}&_fields=acf,date`;\n\n  fetch(apiUrl)\n    .then(res => res.json())\n    .then(data => {\n      if (!data.length || !data[0].acf) return;\n      const acf = data[0].acf;\n      const date = data[0].date;\n      const dateTime = new Date(date);\n\n\n      const buttonHtml =  `<button class=\"btn-apply\" onclick=\"window.open('${acf.link}', '_blank')\">Daftar Sekarang\n        <\/button>`\n\n      document.querySelector(\".career-meta\").innerHTML = `\n        <span>${acf.location}<\/span><span class=\"separator\">\u25aa<\/span><span>${acf.job_type.split(\": \")[1]}<\/span><span class=\"separator\">\u25aa<\/span><span>Posted Date: ${dateTime.toLocaleDateString(\"id-ID\")}<\/span>`;\n\n    })\n    .catch(err => console.error(err));\n});\n<\/script>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-58019724 elementor-widget elementor-widget-heading\" data-id=\"58019724\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Experience Level: 3+ years in QA Engineering<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-4e036265 elementor-widget elementor-widget-button\" data-id=\"4e036265\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"button.default\">\n\t\t\t\t\t\t\t\t\t\t<a class=\"elementor-button elementor-button-link elementor-size-sm\" href=\"https:\/\/www.linkedin.com\/jobs\/view\/4339276685\" target=\"_blank\">\n\t\t\t\t\t\t<span class=\"elementor-button-content-wrapper\">\n\t\t\t\t\t\t\t\t\t<span class=\"elementor-button-text\">Apply<\/span>\n\t\t\t\t\t<\/span>\n\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-28f9f232 e-flex e-con-boxed e-con e-parent\" data-id=\"28f9f232\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-dc75804 elementor-widget elementor-widget-text-editor\" data-id=\"dc75804\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t\t\t\t\t\t<p>We are looking for <em><strong>Quality Engineer<\/strong><\/em> to join our team. The ideal candidate will have strong experience in <em><strong>Quality Assurance<\/strong><\/em>with a focus on <em><strong>test automation<\/strong><\/em>and a proven track record of delivering<em><strong> high-quality software<\/strong><\/em> products<em>.<\/em> You will collaborate closely with <em><strong>Developers<\/strong><\/em>, <em><strong>Product Management<\/strong><\/em> and other stakeholders to ensure the reliability and performance of our applications. <\/p><p> <\/p><h3><b>Key Responsibilities:<\/b><\/h3><ul><li>Design, develop, and execute <strong>test plans, test cases<\/strong>, and automation scripts <em><strong>automation scripts<\/strong><\/em> to ensure product quality.<\/li><li>Testing <em><strong>functionality<\/strong><\/em>, <em><strong>regression<\/strong><\/em>and integration testing across web and mobile platforms.<\/li><li>Implement and maintain an automated testing framework, preferably using Katalon Studio.<\/li><li>Collaborate with development teams to identify, report and track defects.<\/li><li>Participate in needs analysis and testing strategy discussions.<\/li><li>Continuously improve QA processes and advocate for best practices in testing and automation.<\/li><li>Monitor and analyze test results, providing actionable insights to stakeholders.<\/li><\/ul><p> <\/p><h3><b>Required Qualifications:<\/b><\/h3><ul><li><strong>3+ years of experience<\/strong> in <em><strong>Quality Assurance<\/strong><\/em> and <em>software testing<\/em>.<\/li><li>Hands-on experience in <strong>test automation<\/strong>, preferably using <strong>Katalon Studio<\/strong> (or similar tools such as Selenium, Playwright, etc.).<\/li><li>Strong understanding of <strong>SDLC<\/strong>, <em><strong>Agile Methodologies<\/strong><\/em>and <em><strong>QA Best Practice<\/strong><\/em>.<\/li><li>Excellent problem-solving skills and meticulous attention to detail.<\/li><li>Excellent communication and collaboration skills to influence the testing culture.<\/li><\/ul><p> <\/p><h3><b>Added Value (Nice to Have):<\/b><\/h3><ul><li><p class=\"p1\">ISTQB &#8211; Foundation Level Certified<\/p><\/li><\/ul>\t\t\t\t\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-1fc5cd26 e-con-full e-flex e-con e-child\" data-id=\"1fc5cd26\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5ac0fb3b elementor-widget elementor-widget-html\" data-id=\"5ac0fb3b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<div id=\"event-register\" class=\"register-wrapper\"><\/div>\n\n<script>\ndocument.addEventListener(\"DOMContentLoaded\", function () {\n  \/\/ Ambil slug dari URL\n  const pathParts = window.location.pathname.split(\"\/\").filter(Boolean);\n  const slug = pathParts[pathParts.length - 1]; \n\n  \/\/ API endpoint\n  const apiUrl = `\/wp-json\/wp\/v2\/career?slug=${slug}&_fields=acf`;\n\n  fetch(apiUrl)\n    .then(res => res.json())\n    .then(data => {\n      if (!data.length || !data[0].acf) {\n        document.getElementById(\"event-register\").innerHTML = \"\";\n        return;\n      }\n\n      const acf = data[0].acf;\n        const dateTime = new Date(acf.date_time);\n        const now = new Date();\n\n\n      \/\/ cek apakah sudah lewat\n      const isExpired = dateTime < now;\n      const buttonHtml =  `<a href=\"${acf.link}\" target=\"_blank\" class=\"btn-register\">Apply<\/a>`\n\n      document.getElementById(\"event-register\").innerHTML = `\n        ${buttonHtml}\n      `;\n    })\n    .catch(err => {\n      console.error(err);\n      document.getElementById(\"event-register\").innerHTML = \"\";\n    });\n});\n<\/script>\n\n<style>\n.register-wrapper {\n  display: flex;  \/* vertical center (kalau tinggi diberi) *\/\n  margin: 20px 20px;\n}\n\n.btn-register {\n  display: inline-block;\n  background: #007bff;\n  color: #fff !important;\n  padding: 12px 28px;\n  border-radius: 8px;\n  font-weight: bold;\n  font-size: 16px;\n  text-decoration: none;\n  transition: background 0.3s;\n}\n\n.btn-register:hover {\n  background: #0056b3;\n}\n<\/style>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-3bb8decb e-flex e-con-boxed e-con e-parent\" data-id=\"3bb8decb\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-26c1a3d7 e-con-full e-flex e-con e-child\" data-id=\"26c1a3d7\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-79ef3163 elementor-widget elementor-widget-heading\" data-id=\"79ef3163\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h3 class=\"elementor-heading-title elementor-size-default\">Career Recommendations For You<\/h3>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-4119edba e-flex e-con-boxed e-con e-parent\" data-id=\"4119edba\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1ac82a18 elementor-widget elementor-widget-html\" data-id=\"1ac82a18\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<style>\/* Wrapper *\/\n    .post-grid-wrapper {\n      max-width: 1200px;\n      margin: 0 auto;\n      padding: 20px;\n      font-family: sans-serif;\n    }\n    \n    \/* Dropdown + search *\/\n    .post-filter {\n     margin-bottom: 20px;\n     display: flex;\n     justify-content: space-between; \/* kiri - kanan *\/\n     align-items: center;\n     flex-wrap: wrap; \/* biar turun ke bawah di layar kecil *\/\n     gap: 20px;\n    }\n\n    \/* Kiri *\/\n.filter-left {\n  display: flex;\n  align-items: center;\n  gap: 15px;\n}\n\n\/* Kanan *\/\n.filter-right {\n  display: flex;\n  align-items: center;\n  gap: 10px;\n}\n\n    .post-filter label {\n     font-size: 0.95rem;\n     margin: 0;\n     color: #333;\n     white-space: nowrap;\n    }\n\n    \/* Dropdown *\/\n.post-filter select {\n  padding: 8px 12px;\n  border-radius: 6px;\n  border: 1px solid #ccc;\n  font-size: 0.95rem;\n  background: #fff;\n}\n.search-wrapper input {\n  padding: 8px 12px;\n  padding-right: 30px;\n  border-radius: 6px;\n  border: 1px solid #ccc;\n  font-size: 0.95rem;\n}\n\n\/* Search box *\/\n.search-wrapper {\n  position: relative;\n  display: inline-flex;\n  align-items: center;\n}\n    .search-wrapper input {\n     padding-right: 30px;\n    }\n    .search-wrapper .search-icon {\n  position: absolute;\n  right: 8px;\n  top: 50%;\n  transform: translateY(-50%);\n  color: #666;\n  font-size: 0.9rem;\n}\n    \n    \/* Grid layout *\/\n    .post-grid {\n      --gap: 20px;\n      display: grid;\n      gap: var(--gap);\n      grid-template-columns: repeat(1, 1fr);\n    }\n    @media (min-width: 600px) {\n      .post-grid { grid-template-columns: repeat(2, 1fr); }\n    }\n    @media (min-width: 960px) {\n      .post-grid { grid-template-columns: repeat(3, 1fr); }\n    }\n    \n    \/* Card style *\/\n    .post-card {\n      background: #fff;\n      border-radius: 12px;\n      overflow: hidden;\n      box-shadow: 0 4px 15px rgba(0,0,0,0.1);\n      display: flex;\n      flex-direction: column;\n      transition: transform 0.2s ease, box-shadow 0.2s ease;\n    }\n    .post-card:hover {\n      transform: translateY(-4px);\n      box-shadow: 0 6px 20px rgba(0,0,0,0.15);\n    }\n    .post-card img {\n      width: 100%;\n      aspect-ratio: 16\/9;\n      object-fit: cover;\n      display: block;\n    }\n    .post-card .card-body {\n      padding: 18px;\n      text-align: center;\n      flex: 1;\n      display: flex;\n      flex-direction: column;\n      gap: 12px;\n    }\n    .post-card h3 {\n        margin: 0;\n        font-size: 1.2rem;\n        font-weight: 600;\n        color: #111;\n\n        display: -webkit-box;\n        -webkit-line-clamp: 2;   \/* maksimal 2 baris *\/\n        -webkit-box-orient: vertical;\n        overflow: hidden;\n        text-overflow: ellipsis;\n    }\n    .post-card .excerpt {\n      font-size: 0.95rem;\n      color: #444;\n      flex-grow: 1;\n    }\n    .post-card .readmore a {\n      display: inline-block;\n      padding: 10px 20px;\n      border: 1px solid #ccc;\n      border-radius: 6px;\n      text-decoration: none;\n      color: #111;\n      background: #fff;\n      font-size: 0.9rem;\n      transition: background 0.2s, color 0.2s;\n    }\n    .post-card .readmore a:first-child {\n      background: #fff;\n      color: #111;\n    }\n    .post-card .readmore a:first-child:hover {\n      background: #006bff;\n      color: #fff;\n      border-color: #006bff;\n    }\n    .post-card .readmore .btn-register {\n      background: #006bff;\n      color: #fff;\n      border-color: #006bff;\n    }\n\n    .post-card .readmore .btn-register.disabled {\n      background: #ccc;\n      color: #fff;\n      border-color: #ccc;\n      cursor: not-allowed;\n    }\n    \n    .loading, .error {\n      text-align: center;\n      padding: 20px;\n      color: #666;\n    }\n\/* Status buttons *\/\n.filter-status {\n  display: flex;\n  gap: 10px;\n}\n.filter-status button {\n  padding: 8px 18px;\n  border: 1px solid #ccc;\n  background: #fff;\n  border-radius: 6px;\n  cursor: pointer;\n  font-size: 0.95rem;\n  transition: all 0.2s;\n  color: #111;\n}\n.filter-status button:hover {\n  background: #006bff;\n  color: #fff;\n  border-color: #006bff;\n}\n.filter-status button.active {\n  background: #006bff;\n  color: #fff;\n  border-color: #006bff;\n}\n    <\/style><div class=\"post-grid-wrapper\"><!-- Grid --><div id=\"postGrid\"><div class=\"loading\">Loading posts...<\/div><\/div><\/div><script>(function(){\n          const gridContainer = document.getElementById(\"postGrid\");\n        \n          const baseUrl = \"\/wp-json\/wp\/v2\";\n          const postsPerPage = 6;\n        \n          \/\/ helper: strip HTML\n          function stripHtml(html){\n            const tmp = document.createElement(\"div\");\n            tmp.innerHTML = html;\n            return tmp.textContent || tmp.innerText || \"\";\n          }\n          function truncate(str, n){\n            return str.length > n ? str.slice(0, n).trim() + \"\u2026\" : str;\n          }\n        \n          \/\/ Fetch posts\n          async function loadPosts(catId = \"\", searchTerm = \"\") {\n            gridContainer.innerHTML = '<div class=\"loading\">Loading posts...<\/div>';\n        \n            let url = `${baseUrl}\/career?per_page=${postsPerPage}&_embed`;\n        \n            try {\n              const res = await fetch(url);\n              if (!res.ok) throw new Error(\"Gagal ambil data post\");\n              const posts = await res.json();\n              console.log(posts);\n                \n        \n              const grid = document.createElement(\"div\");\n              grid.className = \"post-grid\";\n        \n              posts.forEach(post => {\n                let thumb = \"\";\n                try {\n                  const fm = post._embedded[\"wp:featuredmedia\"][0];\n                  thumb = fm?.source_url || \"\";\n                } catch (e) {}\n        \n                const acf = post.acf || {};\n                \n\n                const readMoreHtml = `<a href=\"${post.link}\">Read More<\/a>`\n\n                \n        \n                const card = document.createElement(\"div\");\n                card.className = \"post-card\";\n                card.innerHTML = `\n                  ${thumb ? `<img decoding=\"async\" src=\"${thumb}\" alt=\"${post.title.rendered}\">` : \"\"}\n                  <div class=\"card-body\"><h3>${post.title.rendered}<\/h3><div class=\"readmore\">${readMoreHtml}\n                    <\/div><\/div>`;\n                grid.appendChild(card);\n              });\n        \n              gridContainer.innerHTML = \"\";\n              gridContainer.appendChild(grid);\n            } catch (err) {\n              gridContainer.innerHTML = `<div class=\"error\">Error: ${err.message}<\/div>`;\n            }\n          }\n        \n          \/\/ Init\n          loadPosts();\n        })();\n        <\/script>\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"featured_media":18123,"template":"","meta":{"_acf_changed":false,"content-type":"","om_disable_all_campaigns":false},"categories":[363],"class_list":["post-13517","career","type-career","status-publish","has-post-thumbnail","hentry","category-software-engineering"],"acf":{"description":"We are looking for a passionate and detail-oriented Quality Engineer to join our team. The ideal candidate will have strong experience in Quality Assurance, with a focus on test automation, and a proven track record of delivering high-quality software products. You will collaborate closely with developers, product managers, and other stakeholders to ensure the reliability and performance of our applications.  ","job_type":"fulltime: Full time","link":"https:\/\/www.linkedin.com\/jobs\/view\/4339276685","location":"Indonesia - BSD City"},"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/labamu.co.id\/en\/wp-json\/wp\/v2\/career\/13517","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/labamu.co.id\/en\/wp-json\/wp\/v2\/career"}],"about":[{"href":"https:\/\/labamu.co.id\/en\/wp-json\/wp\/v2\/types\/career"}],"version-history":[{"count":2,"href":"https:\/\/labamu.co.id\/en\/wp-json\/wp\/v2\/career\/13517\/revisions"}],"predecessor-version":[{"id":16014,"href":"https:\/\/labamu.co.id\/en\/wp-json\/wp\/v2\/career\/13517\/revisions\/16014"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/labamu.co.id\/en\/wp-json\/wp\/v2\/media\/18123"}],"wp:attachment":[{"href":"https:\/\/labamu.co.id\/en\/wp-json\/wp\/v2\/media?parent=13517"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/labamu.co.id\/en\/wp-json\/wp\/v2\/categories?post=13517"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}