مثالهای WebDriver ضمنی ، صریح و روان

تفاوت بین انتظار ضمنی ، انتظار صریح و انتظار روان در WebDriver چیست؟ به طور دقیق تر ، چه ارتباطی بین WebDriverWait و FluentWait وجود دارد؟

در اینجا نمونه هایی از استفاده از هر روش انتظار در 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'));

چه زمانی باید از انتظارات ضمنی استفاده کنیم؟


به طور معمول ، استفاده از انتظارهای ضمنی توصیه نمی شود ، درصورتی که می توانیم از انتظارهای صریح یا انتظارهای روان استفاده کنیم.



صریح صبر کنید

یک صریح صبر کنید کدی است که شما تعریف می کنید قبل از ادامه کار در کد منتظر بمانید تا یک شرایط خاص اتفاق بیفتد. WebDriverWait به طور پیش فرض با 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 باید شرایط تعریف شده را بررسی کند.
  • هنگام جستجوی عنصری در صفحه ، از انواع خاصی از انتظارات استثنا مانند NoSuchElementExcepts چشم پوشی کنید.
  • حداکثر زمان انتظار برای یک شرایط

نمونه ای از استفاده از 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')));

بیشتر خواندن: