[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"me":3,"catalog:tr:qa-test-automation\u002Fta-locators-selectors-strategy":4,"config":148},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":58,"samples":63},"qa-test-automation","QA \u002F Test Otomasyonu","","ta-locators-selectors-strategy","Ta Locators Selectors Strategy","tr",75,1050,[14,15,16],"junior","mid","senior",[18,21,24,27,30,33,36,39,42,45,48,49,52,55],{"key":19,"name":20,"count":11},"qa-api-testing","Qa Api Testing",{"key":22,"name":23,"count":11},"qa-automation-fundamentals","Qa Automation Fundamentals",{"key":25,"name":26,"count":11},"qa-ci-cd-testing","Qa Ci Cd Testing",{"key":28,"name":29,"count":11},"qa-defect-management","Qa Defect Management",{"key":31,"name":32,"count":11},"qa-exploratory-manual-testing","Qa Exploratory Manual Testing",{"key":34,"name":35,"count":11},"qa-performance-testing","Qa Performance Testing",{"key":37,"name":38,"count":11},"qa-test-case-design","Qa Test Case Design",{"key":40,"name":41,"count":11},"qa-test-strategy","Qa Test Strategy",{"key":43,"name":44,"count":11},"ta-cross-browser-parallel-execution","Ta Cross Browser Parallel Execution",{"key":46,"name":47,"count":11},"ta-framework-architecture-patterns","Ta Framework Architecture Patterns",{"key":8,"name":9,"count":11},{"key":50,"name":51,"count":11},"ta-selenium-cypress-playwright-tradeoffs","Ta Selenium Cypress Playwright Tradeoffs",{"key":53,"name":54,"count":11},"ta-synchronization-flaky-tests","Ta Synchronization Flaky Tests",{"key":56,"name":57,"count":11},"ta-visual-regression-reporting","Ta Visual Regression Reporting",[59],{"key":60,"name":61,"count":62},"test-automation","Test Automation",450,[64,82,95,108,121,134],{"id":65,"topic":9,"difficulty":66,"body":67,"options":68,"correct_key":70,"explanation":81},"019faeb4-4b12-781c-80c8-50e062d49e48",1,"Otomatik UI testlerinde eleman bulmak için neden genellikle CSS class'larına güvenmek yerine özel bir `data-testid` niteliği tercih edilir?",[69,72,75,78],{"key":70,"text":71},"a","CSS class'ları genellikle stil ile ilişkilidir ve tasarım değiştiğinde değişir; `data-testid` ise sadece test için var olduğundan görsel refactor'larda sabit kalır",{"key":73,"text":74},"b","Tarayıcılar DOM motoru seviyesinde `data-testid` aramalarını başka her nitelik aramasından daha hızlı yapar",{"key":76,"text":77},"c","Selenium, Cypress veya Playwright CSS class'ı ile eleman seçemez, çünkü class nitelik seçicileri üç aracın seçici motorundan da kaldırılmıştır",{"key":79,"text":80},"d","HTML5 her etkileşimli eleman için bir `data-testid` niteliği zorunlu kılar","Doğru cevap a: `data-testid`, salt test kancası olarak var olan bir konvansiyondur, bu yüzden bir tasarımcı stylesheet'i yeniden düzenlediğinde yeniden adlandırılmaz veya silinmez — stile bağlı CSS class'larının başına gelen tam olarak budur. b yanlış, motor seviyesinde anlamlı bir hız farkı yoktur. c yanlış, her üç araç da class ile seçim yapabilir ve hiçbiri bu yeteneği kaldırmamıştır. d yanlış, HTML5'te böyle bir zorunluluk yoktur.",{"id":83,"topic":9,"difficulty":66,"body":84,"options":85,"correct_key":73,"explanation":94},"019faeb4-4b13-7609-a36e-1c2071c11ac5","`\u002F\u002Fdiv[3]\u002Fspan[2]\u002Fa` gibi bir locator'ı sabit bir niteliğe dayanan bir locator'a kıyasla neden kırılgan yapar?",[86,88,90,92],{"key":70,"text":87},"XPath ifadeleri modern tarayıcılarda kullanımdan kaldırılmıştır ve tarayıcı üreticisinden hiçbir önceden uyarı olmadan her an çalışmayı durdurabilir",{"key":73,"text":89},"Elemanların DOM'daki tam yapısal konumuna bağlıdır, bu yüzden bir markup yeniden sıralaması veya eklenen bir wrapper `div` onu bozar",{"key":76,"text":91},"Sadece Playwright'ta kullanılabilir, Selenium'da kullanılamaz",{"key":79,"text":93},"Konumsal XPath, DOM boyutundan bağımsız olarak her zaman herhangi bir CSS seçiciden daha yavaş çalışır","Doğru cevap b: konumsal XPath tam ağaç yapısını kodlar, bu yüzden bir tasarımcı bir wrapper eleman eklediğinde veya kardeşleri yeniden sıraladığında, hedef eleman hiç değişmemiş olsa bile locator sessizce bozulur. a yanlış, XPath kullanımdan kaldırılmadı ve hiçbir tarayıcı üreticisi böyle bir kaldırma duyurmadı. c yanlış, Selenium `By.xpath` ile XPath'i yerel olarak destekler. d performans hakkında aşırı genelleme yapıyor, asıl kırılganlık sorunu bu değil.",{"id":96,"topic":9,"difficulty":66,"body":97,"options":98,"correct_key":76,"explanation":107},"019faeb4-4b14-7ba3-9df1-c11aa0a4f9f5","Selenium'da (Java binding), bir elemanı CSS seçicisiyle bulmak için hangi satır doğrudur?",[99,101,103,105],{"key":70,"text":100},"driver.findElement(By.selector(\".submit-btn\", SelectorType.AUTO));",{"key":73,"text":102},"driver.querySelector(\".submit-btn\");",{"key":76,"text":104},"driver.findElement(By.cssSelector(\".submit-btn\"));",{"key":79,"text":106},"driver.findElement(CssSelector(\".submit-btn\"));","Doğru cevap c: Selenium'un `By` sınıfı, CSS tabanlı locator'lar için `By.cssSelector(String)` fabrika metodunu sunar ve `driver.findElement(By.cssSelector(...))` şeklinde kullanılır. a var olmayan bir `By.selector` metodu ve CSS ile XPath'i otomatik ayırt ettiği iddia edilen uydurma bir `SelectorType.AUTO` enum'u uyduruyor; Selenium'un `By` API'sinde böyle bir kavram yoktur. b `WebDriver` üzerinde doğrudan olmayan bir `querySelector` metodu uyduruyor, Selenium API'sinde bu yoktur. d gerekli `By.` ön ekini atlıyor, bu yüzden derlenmez.",{"id":109,"topic":9,"difficulty":66,"body":110,"options":111,"correct_key":70,"explanation":120},"019faeb4-4b15-7416-80d8-f8bdb05103f1","Cypress'te, yaygın `data-cy` konvansiyonunu izleyerek sadece test otomasyonu için ayrılmış bir elemanı seçmenin geleneksel yolu nedir?",[112,114,116,118],{"key":70,"text":113},"cy.get('[data-cy=submit-button]')",{"key":73,"text":115},"cy.select('data-cy', 'submit-button')",{"key":76,"text":117},"cy.locate('data-cy=submit-button')",{"key":79,"text":119},"cy.find('#data-cy-submit-button')","Doğru cevap a: Cypress'in özel bir data-attribute API'si yoktur, bu yüzden topluluk konvansiyonu, genel `cy.get()`'i bir nitelik-seçici string'iyle kullanmaktır: `cy.get('[data-cy=submit-button]')`. b bu imzayla var olmayan bir `cy.select` komutu uyduruyor (Cypress'in gerçek `.select()` komutu `\u003Cselect>` dropdown seçenekleri içindir, nitelik arama için değil). c var olmayan bir `cy.locate` komutu uyduruyor. d aslında bir nitelik olan şey için id seçici sözdizimini yanlış kullanıyor.",{"id":122,"topic":9,"difficulty":66,"body":123,"options":124,"correct_key":79,"explanation":133},"019faeb4-4b16-7864-9f43-ece0852c2c2e","Playwright'ın `getByRole('button', { name: 'Submit' })` gibi rol tabanlı locator'larının arkasındaki temel motivasyon nedir?",[125,127,129,131],{"key":70,"text":126},"DOM'u tamamen atlayıp tarayıcının render motorunu doğrudan sorguladıkları için CSS seçicilerinden daha hızlı çalışırlar",{"key":73,"text":128},"Shadow DOM elemanlarıyla çalışan tek locator türüdür",{"key":76,"text":130},"Elemanın arkasındaki başarısız network isteklerini otomatik olarak yeniden dener",{"key":79,"text":132},"Tarayıcının erişilebilirlik ağacını rol ve erişilebilir isme göre sorgular, böylece test elemanın yardımcı teknolojilere nasıl sunulduğunu yansıtır ve implementasyon markup'ı değişse bile kararlı kalır","Doğru cevap d: rol tabanlı locator'lar tarayıcının erişilebilirlik ağacını rol ve erişilebilir isme göre sorgular, yani test rastlantısal markup yerine kullanıcıya görünen anlamı hedefler ve iki kaygı (test kararlılığı, erişilebilirlik kapsamı) birlikte ele alınır. a yanlış, yine de render iç yapısını dolaşırlar, bir hız kısayolu değildir. b yanlış, Playwright'ın normal locator'ları zaten açık Shadow DOM'u delip geçebilir. c rol tabanlı locator'ların yaptığı şeyle ilgisizdir.",{"id":135,"topic":9,"difficulty":136,"body":137,"options":138,"correct_key":73,"explanation":147},"019faeb4-4b17-7000-a381-bdea46d450fd",2,"Bir sayfada hepsi `btn btn-primary` class'ını paylaşan birkaç buton var ve sadece görünen metinleri farklı (\"Kaydet\", \"İptal\", \"Sil\"). Yeni markup eklemeden belirsizliği en iyi hangi locator stratejisi önler?",[139,141,143,145],{"key":70,"text":140},"Ortak class'a göre seç ve her zaman dönen ilk eşleşmeyi al",{"key":73,"text":142},"Butonu görünen erişilebilir metnine göre bul, örn. Playwright'ın `getByRole('button', { name: 'Kaydet' })` veya metin tabanlı bir XPath\u002FCSS seçici",{"key":76,"text":144},"Sayfadaki tüm `.btn` elemanları arasında kardeş konumunu sayan bir XPath kullan, göreli sıralarının sürümler arasında asla değişmeyeceğini varsayarak",{"key":79,"text":146},"Tag adı `button`'ı class ile birleştirerek seç, çünkü bu sonucu tam olarak bir elemana daraltır","Doğru cevap b: ortak class ayrım yapmadığından ve görünen metin tek ayırt edici, kararlı sinyal olduğundan, o metne göre bulmak (doğrudan veya role+name ile) DOM sırasından bağımsız olarak doğru butonu hedefler. a kırılgandır ve anlamsal olarak yanlıştır — 'ilk eşleşme' sadece rastlantıyla işe yarar. c konumsal kırılganlığı yeniden getirir ve ayrıca sessizce bozulabilecek belirtilmemiş bir sıralama varsayımını da içine gömer. d yanlıştır çünkü tag+class hâlâ üç butonun hepsiyle eşleşir, tek elemana daraltmaz.",{"fields":149,"seniorities":334,"interview_shapes":335,"locales":340,"oauth":342,"question_count":345,"coach_enabled":346,"jd_match_enabled":346},[150,175,195,212,236,249,268,287,309,315,321,328],{"key":151,"name_tr":152,"name_en":152,"sort":66,"specializations":153},"backend","Backend",[154,157,160,163,166,169,172],{"key":155,"name":156,"field":151},"general","Genel",{"key":158,"name":159,"field":151},"go","Go",{"key":161,"name":162,"field":151},"python","Python",{"key":164,"name":165,"field":151},"java","Java",{"key":167,"name":168,"field":151},"csharp","C#\u002F.NET",{"key":170,"name":171,"field":151},"nodejs","Node.js",{"key":173,"name":174,"field":151},"php","PHP",{"key":176,"name_tr":177,"name_en":177,"sort":136,"specializations":178},"frontend","Frontend",[179,180,183,186,189,192],{"key":155,"name":156,"field":176},{"key":181,"name":182,"field":176},"javascript","JavaScript",{"key":184,"name":185,"field":176},"typescript","TypeScript",{"key":187,"name":188,"field":176},"react","React",{"key":190,"name":191,"field":176},"vue","Vue",{"key":193,"name":194,"field":176},"angular","Angular",{"key":196,"name_tr":197,"name_en":197,"sort":198,"specializations":199},"fullstack","Fullstack",3,[200,201,202,203,204,205,206,207,208,209,210,211],{"key":155,"name":156,"field":196},{"key":158,"name":159,"field":151},{"key":161,"name":162,"field":151},{"key":164,"name":165,"field":151},{"key":167,"name":168,"field":151},{"key":170,"name":171,"field":151},{"key":173,"name":174,"field":151},{"key":181,"name":182,"field":176},{"key":184,"name":185,"field":176},{"key":187,"name":188,"field":176},{"key":190,"name":191,"field":176},{"key":193,"name":194,"field":176},{"key":213,"name_tr":214,"name_en":214,"sort":215,"specializations":216},"devops-cloud","DevOps \u002F Cloud",4,[217,218,221,224,227,230,233],{"key":155,"name":156,"field":213},{"key":219,"name":220,"field":213},"aws","AWS",{"key":222,"name":223,"field":213},"gcp","GCP",{"key":225,"name":226,"field":213},"azure","Azure",{"key":228,"name":229,"field":213},"kubernetes","Kubernetes",{"key":231,"name":232,"field":213},"terraform","Terraform",{"key":234,"name":235,"field":213},"linux","Linux",{"key":237,"name_tr":238,"name_en":238,"sort":239,"specializations":240},"ai-engineer","AI Engineer",5,[241,242,243,246],{"key":155,"name":156,"field":237},{"key":161,"name":162,"field":237},{"key":244,"name":245,"field":237},"llm-rag","LLM\u002FRAG",{"key":247,"name":248,"field":237},"mlops","MLOps",{"key":250,"name_tr":251,"name_en":252,"sort":253,"specializations":254},"database","Veritabanı","Database",6,[255,256,259,262,265],{"key":155,"name":156,"field":250},{"key":257,"name":258,"field":250},"postgresql","PostgreSQL",{"key":260,"name":261,"field":250},"mysql","MySQL",{"key":263,"name":264,"field":250},"mongodb","MongoDB",{"key":266,"name":267,"field":250},"redis","Redis",{"key":269,"name_tr":270,"name_en":271,"sort":272,"specializations":273},"mobile","Mobil","Mobile",7,[274,275,278,281,284],{"key":155,"name":156,"field":269},{"key":276,"name":277,"field":269},"ios-swift","iOS (Swift)",{"key":279,"name":280,"field":269},"android-kotlin","Android (Kotlin)",{"key":282,"name":283,"field":269},"flutter","Flutter",{"key":285,"name":286,"field":269},"react-native","React Native",{"key":288,"name_tr":289,"name_en":290,"sort":291,"specializations":292},"security","Güvenlik","Security",8,[293,294,297,300,303,306],{"key":155,"name":156,"field":288},{"key":295,"name":296,"field":288},"appsec","AppSec",{"key":298,"name":299,"field":288},"offensive-pentest","Offensive \u002F Pentest",{"key":301,"name":302,"field":288},"cloud-security","Cloud Security",{"key":304,"name":305,"field":288},"devsecops","DevSecOps",{"key":307,"name":308,"field":288},"blue-team-incident","Blue Team \u002F Incident",{"key":5,"name_tr":6,"name_en":310,"sort":311,"specializations":312},"QA \u002F Test Automation",9,[313,314],{"key":155,"name":156,"field":5},{"key":60,"name":61,"field":5},{"key":316,"name_tr":317,"name_en":317,"sort":318,"specializations":319},"data-engineer","Data Engineer",10,[320],{"key":155,"name":156,"field":316},{"key":322,"name_tr":323,"name_en":324,"sort":325,"specializations":326},"game-dev","Oyun Geliştirme","Game Development",11,[327],{"key":155,"name":156,"field":322},{"key":329,"name_tr":330,"name_en":330,"sort":331,"specializations":332},"ml-engineer","ML Engineer",12,[333],{"key":155,"name":156,"field":329},[14,15,16],{"junior":336,"mid":338,"senior":339},{"questions":337,"median_sec":3},20,{"questions":337,"median_sec":3},{"questions":337,"median_sec":3},[10,341],"en",[343,344],"google","github",22200,true]