Get the DOM Object into View:
At times, few actions are not performed on a DOM object until it is visible in the view-port. Below is the small code snippet to get the DOM object into view using WebDriver's 'JavascriptExecutor' interface.
WebElement element = driver.findElement(By.id("someId"));
JavascriptExecutor js= (JavascriptExecutor) driver;
js.executeScript("arguments[0].scrollIntoView(true);",element);
OR
((JavascriptExecutor) driver).executeScript("document.getElementById('text123').scrollIntoView(true);");
JavascriptExecutor js= (JavascriptExecutor) driver;
js.executeScript("arguments[0].scrollIntoView(true);",element);
OR
Selenium WebDriver Wait Commands:
For any automation scripts to work without any sync issues with application, wait statements are very important. Selenium WebDriver provide different types of Wait conditions to make automation scripts effective.Below are different types of waits & its usage.
- Implicit Wait: An implicit wait is to tell WebDriver to poll the DOM for a certain amount of time when trying to find an element. The default setting is 0.
NOTE: Implicit wait is set for the life of the WebDriver instance.
driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
- Explicit Wait: An explicit wait is wait time explicitly defined to wait for a certain condition to occur before proceeding to the next step. Setting Explicit wait using 'WebDriverWait' is an effective way to handle certain expected conditions.
WebDriverWait wait = new WebDriverWait(driver, 10);
wait.until(ExpectedConditions.elementToBeClickable(By.id("someid")));
Other Expected Conditions:
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("someid")));
wait.until(ExpectedConditions.presenceOfElementLocated(By.id("someid")));
wait.until(ExpectedConditions.textToBePresentInElementLocated(By.xpath("//div[@id= 'TestId'"), "Sample Text"));
wait.until(ExpectedConditions.textToBePresentInElementValue(By.xpath("//div[@id= 'TestId'"), "Sample Text"));
wait.until(ExpectedConditions.alertIsPresent());
wait.until(ExpectedConditions.titleContains("Sample Title"));
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("newFrameId")));
wait.until(ExpectedConditions.invisibilityOfElementLocated(By.id("someid")));
wait.until(ExpectedConditions.invisibilityOfElementWithText(By.id("someid"), "txt"));
Expected Conditions with Logical Operators:
// When both conditions returns true
wait.until(ExpectedConditions.and(
ExpectedConditions.invisibilityOfElementLocated(By.id("TestLink")),
ExpectedConditions.invisibilityOfElementLocated(By.name("TestProd"))));
// When either of the condition returns true
wait.until(ExpectedConditions.or(
ExpectedConditions.presenceOfElementLocated(By.xpath("//*[@id='test']")),
ExpectedConditions.presenceOfElementLocated(By.id("devId")),
ExpectedConditions.presenceOfElementLocated(By.name("Rel"))));
Wait for Ajax Calls to Complete:
public boolean waitForAjaxCalls(WebDriver driver) {
WebDriverWait wait = new WebDriverWait(driver, 30);
ExpectedCondition<Boolean> jQueryWait = new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver driver) {
try {
return ((Long)((JavascriptExecutor)driver).executeScript("return jQuery.active") == 0);
}
catch (Exception e) {
return true;
}
}
};
ExpectedCondition<Boolean> jsWait = new ExpectedCondition<Boolean>() {
@Override
public Boolean apply(WebDriver driver) {
return ((JavascriptExecutor)driver).executeScript("return document.readyState").toString().equals("complete");
}
};
return wait.until(jQueryWait) && wait.until(jsWait);
}
Set Wait Timeouts:
driver.manage().timeouts().pageLoadTimeout(100, TimeUnit.SECONDS);
driver.manage().timeouts().setScriptTimeout(100, TimeUnit.SECONDS);
Handle Split Button Click:
Normally split buttons are put in "<em>" tag & getting the locator working is tricky.
Long xpaths might not work with "<em>" tag, even though you find that correct in FirePath or any xpath vaidator. This would not work during execution.
As per my experience with split button automation, it is good to go with shorter xpath containing <em> tag's className or id.
Below example to make split button work:
System.setProperty("webdriver.chrome.driver","pathTo/chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.get("https://any url/");
// To handle Split Button
driver.findElement(By.xpath("//td/em[@class='x-btn-split']")).click();
driver.close();
Thanks for sharing such a good content with us. keep share these kind of content.i would like to read more.
ReplyDeleteJavaScript Institute in Delhi
Great content. Industry focused practical training for Automation Anywhere in Chennai. website link: Best Automation Anywhere Training Institute in Chennai
ReplyDeleteGood content. You write beautiful things.
ReplyDeletekorsan taksi
mrbahis
hacklink
sportsbet
vbet
taksi
vbet
mrbahis
hacklink
dijital kartvizit
ReplyDeletereferans kimliği nedir
binance referans kodu
referans kimliği nedir
bitcoin nasıl alınır
resimli magnet
QMZ3YL