ლოკატორი შეთანხმებაა და არა კოორდინატი
CSS და XPath ხშირად აღწერს ღილაკის ადგილს და არა მის დანიშნულებას. Playwright-ის როლები, სახელები და სატესტო იდენტიფიკატორები უფრო მკაფიო შეთანხმებას ქმნის.

ნათარგმნი გამოცემა. ტექნიკური იდენტიფიკატორები რჩება თავდაპირველ ფორმაში.
page.locator('.panel > div:nth-child(3) > button.primary') მუშაობს დღეს. ხვალ მუშაობს. ის აგრძელებს მუშაობას მანამ, სანამ დიზაინერი ღილაკს ერთი სლოტით მარცხნივ არ გადაიტანს, შემდეგ კი თქვენი კომპლექტი ვერ მოხერხდება ფუნქციაზე, რომელიც არავის გაუტეხავს. ტესტი არ დაგიწერია. თქვენ დაწერეთ DOM-ის ფოტო.
რასაც დრამატურგი რეალურად გვირჩევს
დრამატურგის დოკუმენტაცია უჩვეულოდ პირდაპირია ამის შესახებ. მისი ლოკატორების სახელმძღვანელო რეკომენდაციას იძლევა პრიორიტეტების მინიჭებას მომხმარებლის წინაშე მყოფი ატრიბუტები და აშკარა კონტრაქტები: getByRole, getByLabel, getByText, getByPlaceholder, getByTestId. როლების ლოკატორები ასახავს იმას, თუ როგორ აღიქვამენ მომხმარებლები და დამხმარე ტექნოლოგია გვერდს. სატესტო ID-ები ქმნიან ცალკე გამოკვეთილ კონტრაქტს, მომხმარებლებისთვის უხილავი ყოფნის ფასად. ისინი სტაბილური რჩება მხოლოდ იმ შემთხვევაში, თუ დეველოპერები შეინარჩუნებენ ამ კონტრაქტს. CSS და XPath სელექტორები დოკუმენტირებულია, როგორც მყიფე, რადგან ისინი დაკავშირებულია DOM სტრუქტურასთან და DOM სტრუქტურა არის ის, რაც იცვლება.
ჩარჩოს ორი თვისება აჯილდოვებს კარგ ჩვევას. ლოკატორები ხელახლა წყდება ყოველი მოქმედების წინ, ასე რომ, ხელახალი რენდერი ორ საფეხურს შორის არ დატოვებს ძველ ელემენტს. ლოკატორები კი მკაცრია: თუ თქვენი ამომრჩეველი ორ ელემენტს ემთხვევა, მოქმედება პირველზე ჩუმად დაწკაპუნების ნაცვლად ისვრის. მკაცრი მარცხი CI-ში არის შემაშფოთებელი შუადღისთვის. არასწორი დაწკაპუნება არასწორ დიალოგში არის შეცდომის ანგარიში თქვენი სახელით.
რატომ მიაღწევენ გენერატორები პირველ რიგში მავნე ჩვევას
გენერირებულ კომპლექტს შეუძლია მიაღწიოს ამომრჩეველს, რომელიც გადაწყვეტს მიმდინარე გვერდზე, განხილვის გარეშე, თუ რა შეიცვლება ხელახალი დიზაინი. ეს არის მიმოხილვის რისკი და არა რაიმე კონკრეტული მოდელის სასწავლო მონაცემების მტკიცებულება. განლაგებასთან დაკავშირებული ტესტები შეიძლება გაიაროს პირველ დღეს და წარუმატებელი იყოს წინა ნაწილის ცვლილების შემდეგ, პროდუქტის ქცევასთან დაკავშირებული მიზეზების გამო.
წარუმატებლობა ძვირი ჯდება კონკრეტულად: კომპლექტი ტირის მგელს ყველა ხელახალი დიზაინის დროს, გუნდი სწავლობს წითელი ნაგებობების იგნორირებას და ერთი რეალური რეგრესი გადის ნაცნობი ხმაურის კედელში.
თხუთმეტი წუთიანი აუდიტი ნებისმიერი კომპლექტისთვის
შეასრულეთ თქვენი ტესტები page.locator-ისთვის CSS ან XPath სტრიქონებით და getByText-ისთვის, რომელიც გამოიყენება ინტერაქტიულ ელემენტებზე. თითოეული დარტყმისთვის დაუსვით ერთი შეკითხვა: ასახელებს თუ არა ეს სელექტორი, რა არის ელემენტი ან სად ზის? შეცვალეთ კოორდინატები კონტრაქტებით:
- ღილაკები და ბმულები:
getByRoleხელმისაწვდომი სახელით. - ფორმის ველები:
getByLabel, ანgetByPlaceholder, როგორც სარეზერვო. - განმეორებადი ან დინამიური შინაარსი:
data-testidშეთანხმებული დეველოპერებთან. getByText: სასარგებლო ტექსტური შინაარსისთვის; ამჯობინეთ როლი და ხელმისაწვდომი სახელი კონტროლზე დაწკაპუნებისას.
თქვენ დარჩებით რამდენიმე ჭეშმარიტად ორაზროვანი კონტროლით. ეს არ არის ტესტის პრობლემა. ეს არის ხელმისაწვდომობის პრობლემა, რომელიც ახლახან იპოვეს უფასოდ.
სიმკაცრის ხაფანგი და როდესაც პირველი() არის აღიარება
დრამატურგის ლოკატორები მკაცრია: სელექტორზე მოქმედება, რომელიც ემთხვევა ორ ელემენტს, გამოცნობის ნაცვლად იწვევს დარღვევას. განიხილეთ მკაცრი რეჟიმის ყველა შეცდომა, როგორც დიზაინის კითხვა. თუ თქვენ გჭირდებათ .first() პაკეტის გასაკეთებლად, ორიდან ერთი ჭეშმარიტია: გვერდი ასახავს დუბლიკატებს, რომლებსაც უნდა ჰქონდეთ განსხვავებული ხელმისაწვდომი სახელები, ან თქვენი ამომრჩევი ძალიან ფართოა. ორივე აღმოჩენაა და არა უხერხულობა. გამოსწორება არის დასახელებული კონტრაქტით შევიწროება, სტაბილური მშობლის მიერ გაფილტვრა ან ტესტის ID-ის მოთხოვნა. .nth(1)-ის მიღწევა, რადგან მეორე მატჩი ამ კვირაში სწორია, არის ის, თუ როგორ სწავლობენ კომპლექტები არასწორი დიალოგის დაწკაპუნებას შემდეგი გამოშვების შემდეგ.
არსებობს ერთი ლეგიტიმური გასაქცევი ლუქი. locator.or() არსებობს იმ შემთხვევებისთვის, როდესაც გვერდი გულწრფელად აჩვენებს ორ მდგომარეობას, როგორიცაა შესვლის ფორმა ან უკვე შესული ბანერი. გამოიყენეთ იგი განზრახ, ორივე ალტერნატივის დასახელებით და ის იკითხება როგორც ფილიალი. გამოიყენეთ იგი ქაღალდზე გაურკვევლობის გამო და იკითხება როგორც მხრების აჩეჩვა.
სად ჯდება აგენტები
მიეცით საშუალება აგენტს შეისწავლოს და შეადგინოს; ლოკატორები არის სადაც თქვენი მიმოხილვა ცხოვრობს. გენერირებული ტესტი getByRole('button', { name: 'Save' })-ით გეტყვით, რას ფიქრობს გვერდი. გენერირებული ტესტი div:nth-child(3)-ით არაფერს გეუბნებათ გარდა იმისა, რომ DOM ოდესღაც ასე გამოიყურებოდა. შეინახეთ პირველი სახეობა. გადაწერეთ მეორე, სანამ ის მიაღწევს CI-ს, რადგან ყოველი მყიფე ლოკატორი, რომელსაც თქვენ მიიღებთ, არის მომავალი ცრუ განგაში, რომელიც უკვე გადაიხადეთ.
საერთო კითხვები
რა არის ყველაზე სანდო ლოკატორის სტრატეგია დრამატურგში?
დრამატურგი რეკომენდაციას უწევს მომხმარებლის წინაშე მყოფ ატრიბუტებს და აშკარა კონტრაქტებს: getByRole, getByLabel, getByText და data-testid ატრიბუტებს. CSS და XPath სელექტორები დოკუმენტირებულია, როგორც მყიფე, რადგან ისინი აკავშირებენ ტესტებს DOM სტრუქტურასთან.
data-testid ატრიბუტები უკეთესია, ვიდრე როლების ლოკატორები?
ისინი წყვეტენ სხვადასხვა პრობლემას. ტესტის იდენტიფიკატორი გადარჩება ნებისმიერ ვიზუალურ ან სტრუქტურულ ცვლილებას, მაგრამ არაფერს ამბობს იმაზე, თუ რას ხედავს მომხმარებელი. როლური ლოკატორები იმეორებენ როგორც მსუბუქი წვდომის შემოწმებას. ზრდასრულთა კომპლექტების უმეტესობა პირველ რიგში იყენებს როლებს და ლეიბლებს, ტესტის ID-ებს განმეორებით ან გენერირებულ კონტენტზე.
რატომ ქმნიან AI ინსტრუმენტები CSS სელექტორებს ასე ხშირად?
გენერატორს შეუძლია აირჩიოს სელექტორი, რომელიც მუშაობს მიმდინარე გვერდზე, ხელახალი დიზაინის პირობებში მისი სტაბილურობის შემოწმების გარეშე. მიზეზი დამოკიდებულია ხელსაწყოზე; აუდიტი მის გამომუშავებას და არა რაიმეს ვარაუდის შესახებ ტრენინგის მონაცემებზე.