Nguwuphi umahluko phakathi kokulinda ngokungagungqiyo, ukulinda ngokucacileyo kunye nokulinda ngokutyibilikayo kwiWebDriver? Ngokukodwa, yintoni ubudlelwane phakathi kweWebDriverWait kunye neFluentWait?
Nayi imizekelo yokusebenzisa indlela nganye yokulinda kwiWebDriver ngeJava.
An linda ngokungagungqiyo kukuxelela iWebDriver ukuba ivote i-DOM kangangexesha elithile xa izama ukufumana into okanye izinto ukuba azifumaneki kwangoko. Ukuseta okungagqibekanga ngu-0 Nje ukuba kusetiwe, ukulinda okungagungqiyo kusetelwe ubomi bento yeWebDriver.
Umzekelo wokusebenzisa ngokungagungqiyo ukulinda
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'));
Kufuneka sisebenzise nini ukulinda ngokungagungqiyo?
Ngokwesiqhelo, akucetyiswa ukuba usebenzise ulindelo olungacacanga, xa sinokusebenzisa ukulinda okucacileyo okanye ukulinda ngokutyibilikayo.
An ukulinda okucacileyo yikhowudi oyichazayo ukulinda imeko ethile ukuba yenzeke ngaphambi kokuba uqhubeke phambili kwikhowudi. IWebDriverLinda ngokungagqibekanga ibize imeko ekuLindelweyo rhoqo kwii-millisecond ezingama-500 ide ibuye ngempumelelo.
Umzekelo wokusebenzisa ngokucacileyo ukulinda
WebDriver driver = new FirefoxDriver(); driver.get('http://somedomain/someurl'); WebElement dynamicElement = (new WebDriverWait(driver, 10))
.until(ExpectedConditions.presenceOfElementLocated(By.id('dynamicElement')));
Kufuneka sikusebenzise nini ukulinda okucacileyo?
Sihlala sisebenzisa ukulinda okucacileyo ukuba into ithatha ixesha elide ukuyilayisha. Sikwasebenzise ukulinda okucacileyo ukujonga ipropathi yeCSS yento (ubukho, ukucofa, njl.njl.) Ezinokutshintsha kwizicelo zeAjax.
Xa usebenzisa umzekelo weFluentWait, singachaza:
Umzekelo wokusebenzisa iFluentWait
// 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')); } });
Sifanele siyisebenzise nini iFluentWait?
Xa uzama ukuvavanya ubukho bento enokuthi ivele emva kwemizuzwana ye-x / imizuzu.
IWebDriverWait sisiqwengana seFluentWait. KwiFluentWait unokhetho oluninzi lokumisela, kunye nexesha lokulinda, njengexesha lokuvota, ngaphandle kokungahoyi njl.
Ke, endaweni yokulinda emva koko usebenzise 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();
singasebenzisa:
WebElement element = wait.until(
ExpectedConditions.elementToBeClickable(By.linkText('Account')));
Ukuqhubeka kokufunda: