[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:tr:qa-test-automation\u002Fmq-mobile-locators-sync-flakiness":4,"config":211},null,{"field_key":5,"field_name":6,"seniority":7,"topic_key":8,"topic_name":9,"spec_key":7,"spec_name":7,"locale":10,"cell_total":11,"field_total":12,"seniorities":13,"topics":17,"specs":112,"samples":126},"qa-test-automation","QA \u002F Test Otomasyonu","","mq-mobile-locators-sync-flakiness","Mq Mobile Locators Sync Flakiness","tr",75,2400,[14,15,16],"junior","mid","senior",[18,21,24,25,28,31,34,37,40,43,46,49,52,55,58,61,64,67,70,73,76,79,82,85,88,91,94,97,100,103,106,109],{"key":19,"name":20,"count":11},"mq-appium-driver-architecture","Mq Appium Driver Architecture",{"key":22,"name":23,"count":11},"mq-device-lab-emulator-parallelization","Mq Device Lab Emulator Parallelization",{"key":8,"name":9,"count":11},{"key":26,"name":27,"count":11},"mq-native-frameworks-espresso-xcuitest","Mq Native Frameworks Espresso Xcuitest",{"key":29,"name":30,"count":11},"mq-network-conditioning-offline-validation","Mq Network Conditioning Offline Validation",{"key":32,"name":33,"count":11},"mq-permissions-lifecycle-system-interactions","Mq Permissions Lifecycle System Interactions",{"key":35,"name":36,"count":11},"pf-apm-profiling-bottleneck-correlation","Pf Apm Profiling Bottleneck Correlation",{"key":38,"name":39,"count":11},"pf-distributed-load-generation","Pf Distributed Load Generation",{"key":41,"name":42,"count":11},"pf-environment-fidelity-test-design","Pf Environment Fidelity Test Design",{"key":44,"name":45,"count":11},"pf-load-model-design","Pf Load Model Design",{"key":47,"name":48,"count":11},"pf-metrics-percentiles-analysis","Pf Metrics Percentiles Analysis",{"key":50,"name":51,"count":11},"pf-scripting-correlation-parameterization","Pf Scripting Correlation Parameterization",{"key":53,"name":54,"count":11},"qa-api-testing","Qa Api Testing",{"key":56,"name":57,"count":11},"qa-automation-fundamentals","Qa Automation Fundamentals",{"key":59,"name":60,"count":11},"qa-ci-cd-testing","Qa Ci Cd Testing",{"key":62,"name":63,"count":11},"qa-defect-management","Qa Defect Management",{"key":65,"name":66,"count":11},"qa-exploratory-manual-testing","Qa Exploratory Manual Testing",{"key":68,"name":69,"count":11},"qa-performance-testing","Qa Performance Testing",{"key":71,"name":72,"count":11},"qa-test-case-design","Qa Test Case Design",{"key":74,"name":75,"count":11},"qa-test-strategy","Qa Test Strategy",{"key":77,"name":78,"count":11},"sd-ci-test-infrastructure","Sd Ci Test Infrastructure",{"key":80,"name":81,"count":11},"sd-code-quality-test-code","Sd Code Quality Test Code",{"key":83,"name":84,"count":11},"sd-contract-testing","Sd Contract Testing",{"key":86,"name":87,"count":11},"sd-test-data-management","Sd Test Data Management",{"key":89,"name":90,"count":11},"sd-test-doubles-mocking","Sd Test Doubles Mocking",{"key":92,"name":93,"count":11},"sd-test-framework-design","Sd Test Framework Design",{"key":95,"name":96,"count":11},"ta-cross-browser-parallel-execution","Ta Cross Browser Parallel Execution",{"key":98,"name":99,"count":11},"ta-framework-architecture-patterns","Ta Framework Architecture Patterns",{"key":101,"name":102,"count":11},"ta-locators-selectors-strategy","Ta Locators Selectors Strategy",{"key":104,"name":105,"count":11},"ta-selenium-cypress-playwright-tradeoffs","Ta Selenium Cypress Playwright Tradeoffs",{"key":107,"name":108,"count":11},"ta-synchronization-flaky-tests","Ta Synchronization Flaky Tests",{"key":110,"name":111,"count":11},"ta-visual-regression-reporting","Ta Visual Regression Reporting",[113,117,120,123],{"key":114,"name":115,"count":116},"mobile-qa","Mobile QA",450,{"key":118,"name":119,"count":116},"performance-testing","Performance Testing",{"key":121,"name":122,"count":116},"sdet","SDET",{"key":124,"name":125,"count":116},"test-automation","Test Automation",[127,145,159,172,185,198],{"id":128,"topic":9,"difficulty":129,"body":130,"options":131,"correct_key":133,"explanation":144},"019ff83e-92b8-7707-bef3-3baf1c101082",1,"Bir Android UI Automator dump'ında bir elemanın `resource-id` niteliği, uygulamanın kaynak kodunda neye karşılık gelir?",[132,135,138,141],{"key":133,"text":134},"a","View'ın `android:id` değeri, uygulamanın paket ön ekiyle birlikte gösterilir, örn. `com.example.app:id\u002Fsubmit_button`",{"key":136,"text":137},"b","UI dump'ının alındığı andaki view'ın ekran üzerindeki piksel koordinatları",{"key":139,"text":140},"c","O view için bir ekran okuyucunun seslendireceği erişilebilirlik etiketi",{"key":142,"text":143},"d","Appium'un her test çalıştırmasında locator'ları benzersiz tutmak için tazeden ürettiği rastgele bir hash","`resource-id`, view'ın `android:id` değerinden (ya da kodda atanan id'den) doldurulur ve hiyerarşi dump'ında paket ön ekiyle raporlanır. Ekran koordinatları ayrı bir `bounds` niteliğidir, resource-id değildir. Ekran-okuyucu etiketi ise tamamen farklı bir nitelik olan `content-desc`'e karşılık gelir. Appium resource-id değeri uydurmaz; sadece uygulamanın zaten sunduğunu okur.",{"id":146,"topic":9,"difficulty":147,"body":148,"options":149,"correct_key":139,"explanation":158},"019ff83e-92b9-7a01-a101-b6c55389a730",2,"Appium'un `-android uiautomator` stratejisinde, `UiSelector` ile bir view'ı tam görünen metnine göre hedeflemek için hangi satır doğrudur?",[150,152,154,156],{"key":133,"text":151},"new UiSelector().label(\"Sign in\")",{"key":136,"text":153},"By.text(\"Sign in\")",{"key":139,"text":155},"new UiSelector().text(\"Sign in\")",{"key":142,"text":157},"new BySelector().text(\"Sign in\")","`UiSelector`, bir `-android uiautomator` string'i içinde değerlendirilen akıcı Java builder'ıdır ve `.text(...)` tam görünen metni eşler. `.label(...)` bir `UiSelector` metodu değildir — `label` iOS\u002FXCUITest terminolojisidir, Android'in UiAutomator API'sinin parçası değildir. `By`, ayrı bir instrumented-test sınıfıdır (`UiDevice.findObject(By.text(...))`), `-android uiautomator` string'i içinde kurulan bir şey değildir. `BySelector` da `UiSelector` gibi `new` ile örneklenip zincirlenmez.",{"id":160,"topic":9,"difficulty":129,"body":161,"options":162,"correct_key":139,"explanation":171},"019ff83e-92ba-77da-98cf-02bafe3b1c79","iOS'ta Appium'un `accessibility id` locator stratejisi gerçekte neyi eşler?",[163,165,167,169],{"key":133,"text":164},"Elemanın, dile göre çevrilen görünen etiket metni",{"key":136,"text":166},"Xcode'un UI kontrolünün Swift değişken adından otomatik ürettiği bir isim",{"key":139,"text":168},"Elemanın `accessibilityIdentifier`'ı — salt otomasyon araçları için atanmış, dile göre değişmeyen bir değer",{"key":142,"text":170},"Yalnızca `value` da sunan elemanlarda (metin alanı, slider gibi) var olan bir değer","`accessibility id`, geliştiricinin atadığı, dile göre çevrilmeyen ve özellikle test\u002Ferişilebilirlik araçları için var olan `accessibilityIdentifier`'a eşlenir. Görünen etiket metni farklı bir niteliktir (`label`) ve dile göre değişir. Xcode değişken adından otomatik kimlik üretmez; bunun açıkça atanması gerekir. `accessibilityIdentifier`, elemanın bir `value`'ya sahip olup olmamasından bağımsızdır — buton ve etiketler de taşıyabilir.",{"id":173,"topic":9,"difficulty":147,"body":174,"options":175,"correct_key":136,"explanation":184},"019ff83e-92ba-7f01-9e9d-c5c72b4f5489","iOS'ta, XCUITest\u002FAppium üzerinden görülen bir elemanın `label`'ı ile `value`'su arasındaki temel fark nedir?",[176,178,180,182],{"key":133,"text":177},"`label` ve `value`, her eleman tipinde tamamen aynı string'in birbirinin yerine geçen iki adıdır",{"key":136,"text":179},"`label`, elemanın ne olduğunu anlatan (genelde yerelleştirilmiş) metindir; `value` ise güncel durumu ya da içeriği yansıtır",{"key":139,"text":181},"`value` her zaman elemanın `accessibilityIdentifier`'ını taşır, `label` ise dahili bir bellek adresini taşır",{"key":142,"text":183},"`label` yalnızca buton'larda, `value` yalnızca image'lerde bulunur","XCUITest, `label`'ı (eleman ne\u002Fne söylüyor) ve `value`'yu (güncel durum ya da içerik) ayrı nitelikler olarak sunar — bir switch'in `label`'ı \"Wi-Fi\" iken `value`'su \"1\" ya da \"0\" olabilir. Birbirinin takma adı değillerdir. `value`, kimliği taşımaz — bu ayrı bir `identifier`\u002F`accessibilityIdentifier` niteliğidir. Hiçbiri yalnızca buton'a ya da yalnızca image'e özgü değildir.",{"id":186,"topic":9,"difficulty":147,"body":187,"options":188,"correct_key":133,"explanation":197},"019ff83e-92bb-76da-aebe-8ffd92cffa16","Bir elemanı `content-desc` (Android) ya da `label` (iOS) ile bulmak, neden özel bir test kimliğiyle bulmaktan daha kırılgan olma eğilimindedir?",[189,191,193,195],{"key":133,"text":190},"Çeviri ekipleri onu görünen UI metniyle birlikte yerelleştirir, bu yüzden tam-string'e kurulu bir locator başka dilde bozulur",{"key":136,"text":192},"Çünkü Appium bu değeri güvenlik amacıyla her uygulama açılışında rastgele yeniden üretir",{"key":139,"text":194},"Çünkü herhangi bir build konfigürasyonundan bağımsız olarak her release build'de kırpılır",{"key":142,"text":196},"Çünkü yalnızca debug build'lerde var olur ve her release APK\u002FIPA'sından derlemede çıkarılır","content-desc\u002Flabel erişilebilirliğe hizmet etmek için vardır, bu yüzden bir ekran-okuyucu kullanıcısının duyduğu aynı yerelleştirilmiş ifadeyi taşırlar — uygulamayı yeni bir pazar için çevirmek bu string'i değiştirir, ona sabit kodlanmış her locator'ı bozar. Appium bu değerleri rastgeleleştirmez. content-desc ya da label, geliştirici atadığı sürece release build'lerden çıkarılan debug-özel bir yapı değildir.",{"id":199,"topic":9,"difficulty":147,"body":200,"options":201,"correct_key":136,"explanation":210},"019ff83e-92bf-7269-8de5-e03d5e7c389f","Mobilde bir XPath sorgusu, aynı elemanı `resource-id` veya `accessibility id` gibi özel bir niteliğe göre bulmaktan neden genelde çok daha pahalıdır?",[202,204,206,208],{"key":133,"text":203},"XPath sorguları mobil işletim sistemi üreticisi tarafından karakter başına ücretlendirilir, bu yüzden uzun ifadeler orantılı olarak daha pahalıdır",{"key":136,"text":205},"Driver tüm erişilebilirlik ağacını serileştirip düğüm düğüm gezmek zorundadır, bu yüzden maliyet ağaç boyutuyla ölçeklenir",{"key":139,"text":207},"XPath, mobil işletim sistemlerinin kullanımını caydırmak için aktif olarak kısıtladığı kullanımdan kaldırılmış bir protokoldür",{"key":142,"text":209},"XPath, tamamen yerel bir emülatörde test edilirken bile her zaman bulut cihaz çiftliğine bir ağ round-trip'i gerektirir","XPath değerlendirmesi gezilecek tam bir ağaç gerektirir, bu yüzden driver önce o anki hiyerarşinin tamamını serileştirir — derin ya da büyük bir ekran, hedef nerede olursa olsun her XPath sorgusunu yavaşlatır. Bir işletim sistemi üreticisinin XPath için karakter başına ücretlendirmesi yoktur. XPath, Android\u002FiOS tarafından kısıtlanmaz ya da kullanımdan kaldırılmamıştır. XPath değerlendirmesi tamamen cihaz\u002Fdriver üzerinde gerçekleşir, bulut ağ round-trip'iyle ilgisi yoktur.",{"fields":212,"seniorities":427,"interview_shapes":428,"locales":433,"oauth":435,"question_count":438,"coach_enabled":439,"jd_match_enabled":439},[213,238,258,275,299,312,331,350,372,381,396,418],{"key":214,"name_tr":215,"name_en":215,"sort":129,"specializations":216},"backend","Backend",[217,220,223,226,229,232,235],{"key":218,"name":219,"field":214},"general","Genel",{"key":221,"name":222,"field":214},"go","Go",{"key":224,"name":225,"field":214},"python","Python",{"key":227,"name":228,"field":214},"java","Java",{"key":230,"name":231,"field":214},"csharp","C#\u002F.NET",{"key":233,"name":234,"field":214},"nodejs","Node.js",{"key":236,"name":237,"field":214},"php","PHP",{"key":239,"name_tr":240,"name_en":240,"sort":147,"specializations":241},"frontend","Frontend",[242,243,246,249,252,255],{"key":218,"name":219,"field":239},{"key":244,"name":245,"field":239},"javascript","JavaScript",{"key":247,"name":248,"field":239},"typescript","TypeScript",{"key":250,"name":251,"field":239},"react","React",{"key":253,"name":254,"field":239},"vue","Vue",{"key":256,"name":257,"field":239},"angular","Angular",{"key":259,"name_tr":260,"name_en":260,"sort":261,"specializations":262},"fullstack","Fullstack",3,[263,264,265,266,267,268,269,270,271,272,273,274],{"key":218,"name":219,"field":259},{"key":221,"name":222,"field":214},{"key":224,"name":225,"field":214},{"key":227,"name":228,"field":214},{"key":230,"name":231,"field":214},{"key":233,"name":234,"field":214},{"key":236,"name":237,"field":214},{"key":244,"name":245,"field":239},{"key":247,"name":248,"field":239},{"key":250,"name":251,"field":239},{"key":253,"name":254,"field":239},{"key":256,"name":257,"field":239},{"key":276,"name_tr":277,"name_en":277,"sort":278,"specializations":279},"devops-cloud","DevOps \u002F Cloud",4,[280,281,284,287,290,293,296],{"key":218,"name":219,"field":276},{"key":282,"name":283,"field":276},"aws","AWS",{"key":285,"name":286,"field":276},"gcp","GCP",{"key":288,"name":289,"field":276},"azure","Azure",{"key":291,"name":292,"field":276},"kubernetes","Kubernetes",{"key":294,"name":295,"field":276},"terraform","Terraform",{"key":297,"name":298,"field":276},"linux","Linux",{"key":300,"name_tr":301,"name_en":301,"sort":302,"specializations":303},"ai-engineer","AI Engineer",5,[304,305,306,309],{"key":218,"name":219,"field":300},{"key":224,"name":225,"field":300},{"key":307,"name":308,"field":300},"llm-rag","LLM\u002FRAG",{"key":310,"name":311,"field":300},"mlops","MLOps",{"key":313,"name_tr":314,"name_en":315,"sort":316,"specializations":317},"database","Veritabanı","Database",6,[318,319,322,325,328],{"key":218,"name":219,"field":313},{"key":320,"name":321,"field":313},"postgresql","PostgreSQL",{"key":323,"name":324,"field":313},"mysql","MySQL",{"key":326,"name":327,"field":313},"mongodb","MongoDB",{"key":329,"name":330,"field":313},"redis","Redis",{"key":332,"name_tr":333,"name_en":334,"sort":335,"specializations":336},"mobile","Mobil","Mobile",7,[337,338,341,344,347],{"key":218,"name":219,"field":332},{"key":339,"name":340,"field":332},"ios-swift","iOS (Swift)",{"key":342,"name":343,"field":332},"android-kotlin","Android (Kotlin)",{"key":345,"name":346,"field":332},"flutter","Flutter",{"key":348,"name":349,"field":332},"react-native","React Native",{"key":351,"name_tr":352,"name_en":353,"sort":354,"specializations":355},"security","Güvenlik","Security",8,[356,357,360,363,366,369],{"key":218,"name":219,"field":351},{"key":358,"name":359,"field":351},"appsec","AppSec",{"key":361,"name":362,"field":351},"offensive-pentest","Offensive \u002F Pentest",{"key":364,"name":365,"field":351},"cloud-security","Cloud Security",{"key":367,"name":368,"field":351},"devsecops","DevSecOps",{"key":370,"name":371,"field":351},"blue-team-incident","Blue Team \u002F Incident",{"key":5,"name_tr":6,"name_en":373,"sort":374,"specializations":375},"QA \u002F Test Automation",9,[376,377,378,379,380],{"key":218,"name":219,"field":5},{"key":124,"name":125,"field":5},{"key":121,"name":122,"field":5},{"key":118,"name":119,"field":5},{"key":114,"name":115,"field":5},{"key":382,"name_tr":383,"name_en":383,"sort":384,"specializations":385},"data-engineer","Data Engineer",10,[386,387,390,393],{"key":218,"name":219,"field":382},{"key":388,"name":389,"field":382},"pipelines-etl","Pipelines \u002F ETL",{"key":391,"name":392,"field":382},"streaming","Streaming",{"key":394,"name":395,"field":382},"warehousing","Warehousing",{"key":397,"name_tr":398,"name_en":399,"sort":400,"specializations":401},"game-dev","Oyun Geliştirme","Game Development",11,[402,403,406,409,412,415],{"key":218,"name":219,"field":397},{"key":404,"name":405,"field":397},"unity-csharp","Unity (C#)",{"key":407,"name":408,"field":397},"unreal-cpp","Unreal (C++)",{"key":410,"name":411,"field":397},"gameplay","Gameplay",{"key":413,"name":414,"field":397},"graphics-rendering","Graphics \u002F Rendering",{"key":416,"name":417,"field":397},"multiplayer-netcode","Multiplayer \u002F Netcode",{"key":419,"name_tr":420,"name_en":420,"sort":421,"specializations":422},"ml-engineer","ML Engineer",12,[423,424],{"key":218,"name":219,"field":419},{"key":425,"name":426,"field":419},"classical-ml","Classical ML",[14,15,16],{"junior":429,"mid":431,"senior":432},{"questions":430,"median_sec":3},20,{"questions":430,"median_sec":3},{"questions":430,"median_sec":3},[10,434],"en",[436,437],"google","github",27600,true]