WebDriver- ის იმპლიციტური, მკაფიო და თავისუფლად მოლოდინის მაგალითები

რა განსხვავებაა WebDriver– ის იმპულსურ დაყოვნებას, აშკარა ლოდინას და თავისუფლად მოლოდინს? უფრო კონკრეტულად, რა კავშირია WebDriverWait- სა და FluentWait- ს შორის?

აქ მოცემულია Java- ს გამოყენებით WebDriver- ში ლოდინის თითოეული მეთოდის გამოყენების მაგალითები.



დაფარული ლოდინი

ან დაფარული ლოდინი უნდა უთხრას WebDriver- ს, გამოკითხოს DOM გარკვეული დროის განმავლობაში, როდესაც ცდილობთ იპოვოთ ელემენტი ან ელემენტები, თუ ისინი დაუყოვნებლად ხელმისაწვდომი არ არის. ნაგულისხმევი პარამეტრია 0. დაყენებისთანავე, დადგენილია ნაგულისხმევი ლოდინი WebDriver ობიექტის ინსტანტის სიცოცხლისთვის.


ნაგულისხმევი ლოდინის გამოყენების მაგალითი

WebDriver driver = new FirefoxDriver(); driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); driver.get('http://somedomain/slow_loading_url'); WebElement dynamicElement = driver.findElement(By.id('dynamicElement'));

როდის უნდა გამოვიყენოთ არაპირდაპირი ლოდინი?


ჩვეულებრივ, არ არის რეკომენდებული იმპლიციტური ლოდინის გამოყენება, როდესაც შეგვიძლია გამოვიყენოთ აშკარა ლოდინი ან თავისუფლად მოლოდინი.



აშკარა ლოდინი

ან აშკარა ლოდინი არის კოდი, რომელსაც განსაზღვრავთ, რომ დაველოდოთ გარკვეული პირობის დადგომას, სანამ კოდში კიდევ უფრო გააგრძელებთ. WebDriver დაველოდოთ სტანდარტულად მოუწოდებს ExpectedCondition- ს ყოველ 500 მილიწამში, სანამ ის წარმატებით დაბრუნდება.

აშკარა ლოდინის გამოყენების მაგალითი

WebDriver driver = new FirefoxDriver(); driver.get('http://somedomain/someurl'); WebElement dynamicElement = (new WebDriverWait(driver, 10))
.until(ExpectedConditions.presenceOfElementLocated(By.id('dynamicElement')));

როდის უნდა გამოვიყენოთ გამოკვეთილი მოლოდინები?


ჩვენ ჩვეულებრივ გამოვიყენებთ აშკარა ლოდინს, თუ ელემენტის ჩატვირთვას დიდი დრო დასჭირდება. ჩვენ ასევე გამოვიყენეთ მკაფიო ლოდინი, რომ შეამოწმოთ ელემენტის CSS თვისება (არსებობა, დაწკაპუნებადობა და ა.შ.), რომელსაც შეუძლია შეცვალოს Ajax პროგრამებში.



თავისუფლად დაელოდეთ

FluentWait ინსტანციის გამოყენებისას შეგვიძლია მიუთითოთ:

  • სიხშირე, რომელთანაც FluentWait უწევს შემოწმება განსაზღვრულ პირობებში.
  • უგულებელყოფთ გამონაკლისის სპეციფიკურ ტიპებს, მაგალითად NoSuchElementException, გვერდზე ელემენტის ძებნისას.
  • მაქსიმალური დრო, რომ დაველოდოთ მდგომარეობას

FluentWait– ის გამოყენების მაგალითი

// Waiting 30 seconds for an element to be present on the page, checking // for its presence once every 5 seconds. Wait wait = new FluentWait(driver)
.withTimeout(30, SECONDS)
.pollingEvery(5, SECONDS)
.ignoring(NoSuchElementException.class); WebElement foo = wait.until(new Function() {
public WebElement apply(WebDriver driver) {
return driver.findElement(By.id('foo')); } });

როდის უნდა გამოვიყენოთ FluentWait?


როდესაც ცდილობთ შეამოწმოთ ელემენტის არსებობა, რომელიც შეიძლება გამოჩნდეს ყოველ x წამში / წუთში.



განსხვავება WebDriverWait- სა და FluentWait- ს შორის

WebDriverWait არის FluentWait- ის ქვეკლასი. FluentWait- ში თქვენ გაქვთ მეტი კონფიგურაციის ვარიანტები, დალოდების მაქსიმალურ დროსთან ერთად, როგორიცაა კენჭისყრის ინტერვალი, გამონაკლისი უგულებელყოფა

ასე რომ, ლოდინის ნაცვლად და შემდეგ გამოიყენეთ findElement:

WebDriverWait wait = new WebDriverWait(driver, 18); wait.until(ExpectedConditions.elementToBeClickable(By.linkText('Account'))); WebElement element = driver.findElement(By.linkText('Account')); element.sendKeys(Keys.CONTROL); element.click();

ჩვენ შეგვიძლია გამოვიყენოთ:


WebElement element = wait.until(
ExpectedConditions.elementToBeClickable(By.linkText('Account')));

შემდგომი კითხვა:

საინტერესო სტატიები