Dè an diofar eadar feitheamh follaiseach, feitheamh follaiseach agus feitheamh fileanta ann an WebDriver? Gu sònraichte, dè an dàimh a tha eadar WebDriverWait agus FluentWait?
Seo eisimpleirean de bhith a ’cleachdadh gach dòigh feitheamh ann an WebDriver le Java.
An feitheamh ri thuigsinn a bhith ag iarraidh air WebDriver bhòtadh an DOM airson ùine sònraichte nuair a tha iad a ’feuchainn ri eileamaid no eileamaidean a lorg mura h-eil iad rim faighinn sa bhad. Is e an suidheachadh bunaiteach 0. Aon uair 's gu bheil e air a shuidheachadh, tha am feitheamh so-thuigsinn air a shuidheachadh airson beatha eisimpleir nì WebDriver.
Eisimpleir de bhith a ’cleachdadh feitheamh so-thuigsinn
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'));
Cuin a bu chòir dhuinn feitheamh ri feitheamh?
Gu h-àbhaisteach, chan eilear a ’moladh feitheamh ri thuigsinn, nuair as urrainn dhuinn feitheamh soilleir no feitheamh fileanta a chleachdadh.
An feitheamh gu follaiseach na chòd a tha thu a ’mìneachadh gus feitheamh ri suidheachadh sònraichte mus tachair thu nas fhaide air adhart sa chòd. Bidh WebDriverWait gu bunaiteach a ’gairm an ExpectedCondition a h-uile 500 millisecond gus an till e gu soirbheachail.
Eisimpleir de bhith a ’cleachdadh feitheamh sònraichte
WebDriver driver = new FirefoxDriver(); driver.get('http://somedomain/someurl'); WebElement dynamicElement = (new WebDriverWait(driver, 10))
.until(ExpectedConditions.presenceOfElementLocated(By.id('dynamicElement')));
Cuin a bu chòir dhuinn feitheamh sònraichte a chleachdadh?
Mar as trice bhiodh sinn a ’cleachdadh feitheamh sònraichte ma bheir eileamaid ùine mhòr airson luchdachadh. Chleachd sinn cuideachd feitheamh sònraichte gus sgrùdadh a dhèanamh air seilbh CSS de eileamaid (làthaireachd, cliocas. Msaa) a dh ’fhaodadh atharrachadh ann an tagraidhean Ajax.
Nuair a bhios tu a ’cleachdadh an eisimpleir FluentWait, is urrainn dhuinn sònrachadh:
Eisimpleir de bhith a ’cleachdadh 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')); } });
Cuin a bu chòir dhuinn FluentWait a chleachdadh?
Nuair a dh ’fheuchas tu ri deuchainn a dhèanamh air làthaireachd eileamaid a dh’ fhaodadh nochdadh às deidh gach x diog / mionaid.
Tha WebDriverWait na fho-chlas de FluentWait. Ann am FluentWait tha barrachd roghainnean agad airson rèiteachadh, còmhla ris an ùine feitheamh as àirde, leithid àm bhòtaidh, eisgeachdan ri leigeil seachad msaa.
Mar sin, an àite feitheamh agus an uairsin a ’cleachdadh 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();
faodaidh sinn a chleachdadh:
WebElement element = wait.until(
ExpectedConditions.elementToBeClickable(By.linkText('Account')));
Barrachd leughaidh: