Sobes.tech
Junior

Ինչպե՞ս եք գտնելու էլեմենտների լոկատորները վեբ էջում։

sobes.tech AI

Պատասխան AI-ից

Լոկալիզացիայի տարրերի համար օգտագործում եմ հետևյալ մոտեցումները, սկսած ամենահուսալիներից.

  1. ID-ի միջոցով: Տարրի եզակի նույնականիչ։ Ամենահաստատ տարբերակն է, եթե ID-ն սահմանված է ծրագրավորողների կողմից։

    # Տարրի որոնում ID-ի միջոցով
    driver.find_element(By.ID, "element_id")
    
  2. Կլասի (կլասի անուն) միջոցով: Որոնում class ատրիբուտի արժեքով։ Կարող է լինել ոչ այնքան եզակի, քան ID-ն։

    # Տարրի որոնում կլասի անունով
    driver.find_element(By.CLASS_NAME, "element_class")
    
  3. CSS սելեկտորի միջոցով: Ուժեղ գործիք, որը թույլ է տալիս գտնել տարրեր տարբեր ատրիբուտներով, DOM-ի կառուցվածքով, псևդոկլասներով և այլն։ Գործունակությունը համեմատելի է XPath-ի հետ, բայց սինտաքսը հաճախ պարզ է և արագ է։

    # Տարրի որոնում CSS սելեկտորի միջոցով
    driver.find_element(By.CSS_SELECTOR, "div.container > button[type='submit']")
    
  4. XPath-ի միջոցով: Հարցման լեզու XML փաստաթղթում (ներառյալ HTML) հանգույցներ որոնելու համար։ Позволяет находить элементы по их положению в DOM, атрибутам, текстам։ Լավ է առանց եզակի ID/կլասների կամ հորինվածքների համար։ Կարող է լինել ավելի քիչ արդյունավետ, քան CSS սելեկտորները։

    # XPath-ի միջոցով որոնում
    driver.find_element(By.XPATH, "//div[@class='form']//input[@name='password']")
    
  5. Տեգի անունով (Tag Name): Բոլոր տեգի տարրերը։ Զրոյական է օգտագործվում կոնկրետ տարր գտնելու համար, ավելի հաճախ՝ ցանկի համար։

    # Բոլոր div տարրերը
    driver.find_elements(By.TAG_NAME, "div")
    
  6. Հղման տեքստով (Link Text/Partial Link Text): Մասնավորապես <a> տարրերի համար։

    # Հղման որոնում ըստ ճշգրիտ տեքստի
    driver.find_element(By.LINK_TEXT, "Կլիկեք այստեղ")
    
    # Հղման որոնում մասամբ տեքստով
    driver.find_element(By.PARTIAL_LINK_TEXT, "Կլիկեք")
    
  7. Անվամբ (Name): Ատրիբուտի name արժեքով։ Շատ հաճախ օգտագործվում է ձևերի դաշտերի համար։

    # Տարրի որոնում `name`-ով
    driver.find_element(By.NAME, "username")
    

Ընտրելիս օգտագործում եմ հետևյալ սկզբունքները:

  • Ենթադրվում է եզակիություն: Լոկալիզատորը պետք է եզակիորեն նույնականացնի անհրաժեշտ տարրին։
  • Տևականություն: Ընտրում եմ այն լոկալիզատորները, որոնք ամենահավանական է, որ չեն փոխվի էջի դիզայնի կամ կառուցվածքի փոփոխությունների դեպքում (առաջնահերթություն տալիս եմ ID և ատրիբուտներին, ոչ թե դիրքային XPath-ին):
  • Կարդացվողություն և պահպանելիություն: Լոկալիզատորը պետք է լինի հասկանալի։

Օգտագործելով CSS սելեկտորներ կամ XPath, փորձում եմ խուսափել խոր կամ ամբողջական ներմուծումից DOM-ի կառուցվածքում, նախընտրում եմ որոնել տարրերը մոտակա եզակի ծնողի կամ իրենց սեփական ատրիբուտների հարաբերությամբ։ Բրաուզերի DevTools-ով իրականացնում եմ DOM-ի ինսպեկցիա և լոկալիզատորների սխալների թեստավորում։