Issue
While writing Selenium automation test for a website having number of rows in the form of DIV inside one DIV. every row denotes one DIV. suppose dynamically if I have 5 rows then following code structure is there.
<div id="mainDiv">
<div id-"div1"><table>......</table></div>
<div id-"div2"><table>......</table></div>
<div id-"div3"><table>......</table></div>
<div id-"div4"><table>......</table></div>
<div id-"div5"><table>......</table></div>
</div>
I am fetching each row div/table/tr/td using XPath in for loop in my code and clicking on each. So that I can download pdf. But it is working fine for 19 DIV. for 20th DIV I am not able to find that in my page using XPATH. I am getting no such element exception. though I applied wait then I get that explicit condition failed issue. Can anyone having idea that its a scroll issue or anything else because of which I am not able to fine 20th and further more divs.
Solution
Probably it looks like that element is not in Selenium viewPort.
You have multiple ways to deal with this :
1. Scrolling :
JavascriptExecutor jse = (JavascriptExecutor)driver;
jse.executeScript("window.scrollBy(0,250)");
This is not very optimal way. Now, You can try for each element scroll to view :
2. scrollIntoView :
Let's say you have a list of web elements. (allDivs)
for (WebElement div : allDivs){
((JavascriptExecutor) driver).executeScript("arguments[0].scrollIntoView(true);", div);
// and the do click or whatever
}
3. Use of moveToElement
for(WebElement divs : allDivs) {
new Actions(driver).moveToElement(divs).build().perform();
// click on div here
}
Answered By - cruisepandey
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.