Below is the code where selenium is unable to find the element.
By machineUIList = By.xpath("//div[@class='thmbinnerdiv']");
Thread.sleep(5000);
ArrayList<String> machineUITextList = objUtilities.getElementsTextList(machineUIList);
Thread.sleep(5000);
System.out.println(machineUITextList);
So I am trying to get a list of machine names and store it in an arraylist.
The HTML DOM is
But somehow it fails and doesnt work for me. It always gives me below exception: stale element reference: element is not attached to the page document
Added the code for --getElementsTextList
public ArrayList<String> getElementsTextList(By locator) {
ArrayList<String> eleTextList = new ArrayList<String>();
List<WebElement> eleList = waitForVisibilityOfElements(locator, 30);
for (WebElement e : eleList) {
if (!e.getText().isEmpty()) {
eleTextList.add(e.getText());
}
}
return eleTextList;
}
Code of waitforVisibilityofElement
public List<WebElement> waitForVisibilityOfElements(By locator, int timeOut) {
WebDriverWait wait = new WebDriverWait(driver, timeOut);
return wait.until(ExpectedConditions.visibilityOfAllElementsLocatedBy(locator));
}
HTML DOM:
<div _ngcontent-xmt-c28="" class="col-lg-9 col-md-8 col-sm-6 col-xs-12 reducewidthxslandscap"><div _ngcontent-xmt-c28="" class="row"><div _ngcontent-xmt-c28="" ng-class="{'margin-right-15' : linemachinedata.MachineDetailList.length > 6}" class="linemachineblocrightscroll"><div _ngcontent-xmt-c28="" class="col-lg-4 col-md-6 col-sm-12 col-xs-12 machinedetailsinnerwrapper"><div _ngcontent-xmt-c28="" class="thumbnails machineblockdiv machineblockdivheight cursorpointer"><div _ngcontent-xmt-c28="" class="thmbinnerdiv"><h5 _ngcontent-xmt-c28="">TC-34</h5><!--bindings={
"ng-reflect-ng-if": "false"
}--><span _ngcontent-xmt-c28=""><img _ngcontent-xmt-c28="" src="./assets/Images/stopped1.png"></span><!--bindings={
"ng-reflect-ng-if": "true"
}--></div><div _ngcontent-xmt-c28="" tabindex="0" ng-reflect-router-link="/Machinedashboard" ng-reflect-query-params="[object Object]"><div _ngcontent-xmt-c28=""><app-circular-progressbar _ngcontent-xmt-c28="" _nghost-xmt-c27="" ng-reflect-percentage="0"><div _ngcontent-xmt-c27="" class="c100 p0 rounded-prgsbar red" ng-reflect-ng-class="[object Object]"><span _ngcontent-xmt-c27="" class="machperasly font-19">0<h6 _ngcontent-xmt-c27="" class="machnameper">.00%</h6></span><div _ngcontent-xmt-c27="" class="slice"><div _ngcontent-xmt-c27="" class="bar"></div><div _ngcontent-xmt-c27="" class="fill"></div></div></div></app-circular-progressbar><div _ngcontent-xmt-c28="" class="thmbinnerdiv1"><label _ngcontent-xmt-c28="">NewPart</label><h6 _ngcontent-xmt-c28="">Part Number</h6></div><div _ngcontent-xmt-c28="" class="thmbinnerdiv2 margin-top-10 margin-bottom-10"><label _ngcontent-xmt-c28="">00</label><h6 _ngcontent-xmt-c28="">Operation Number</h6></div><div _ngcontent-xmt-c28="" class="innerdiv2"><div _ngcontent-xmt-c28="" class="progress_summury"><label _ngcontent-xmt-c28="" class="firstsumry">0</label><label _ngcontent-xmt-c28="" class="secondsumry">0</label><label _ngcontent-xmt-c28="" class="numcount thirdsumry text-right">0</label></div><div _ngcontent-xmt-c28="" class="progress_summury"><h6 _ngcontent-xmt-c28="" class="firstsumry">Parts Produced</h6><h6 _ngcontent-xmt-c28="" class="secondsumry">Parts Rejected</h6><h6 _ngcontent-xmt-c28="" class="thirdsumry text-right">Target</h6></div></div><app-progressbar _ngcontent-xmt-c28="" ng-reflect-percentage="0"><div class="progress progress-line"><div role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" ng-reflect-ng-class="[object Object]" class="red-prg-bar" style="width: 0%;"><span class="sr-only"> 0 % Complete</span></div></div></app-progressbar><div _ngcontent-xmt-c28="" class="thmbinnerdiv3"><h6 _ngcontent-xmt-c28="">Total Downtime</h6></div><div _ngcontent-xmt-c28="" class="thmbinnerdiv5"><span _ngcontent-xmt-c28="" class="glyphicon glyphicon-time margin-right-5 color-red small"></span><label _ngcontent-xmt-c28="" class="margin-left-3">0h 0m </label></div></div><!--bindings={
"ng-reflect-ng-for-of": "[object Object]"
}--><!--bindings={
"ng-reflect-ng-if": "false"
}--></div><!--bindings={
"ng-reflect-ng-for-of": "[object Object]"
}--><!--bindings={
"ng-reflect-ng-if": "false"
}--></div></div><div _ngcontent-xmt-c28="" class="col-lg-4 col-md-6 col-sm-12 col-xs-12 machinedetailsinnerwrapper"><div _ngcontent-xmt-c28="" class="thumbnails machineblockdiv machineblockdivheight cursorpointer"><div _ngcontent-xmt-c28="" class="thmbinnerdiv"><h5 _ngcontent-xmt-c28="">TC-25</h5><!--bindings={
"ng-reflect-ng-if": "false"
}--><span _ngcontent-xmt-c28=""><img _ngcontent-xmt-c28="" src="./assets/Images/stopped1.png"></span><!--bindings={
"ng-reflect-ng-if": "true"
}--></div><div _ngcontent-xmt-c28="" tabindex="0" ng-reflect-router-link="/Machinedashboard" ng-reflect-query-params="[object Object]"><div _ngcontent-xmt-c28=""><app-circular-progressbar _ngcontent-xmt-c28="" _nghost-xmt-c27="" ng-reflect-percentage="0"><div _ngcontent-xmt-c27="" class="c100 p0 rounded-prgsbar red" ng-reflect-ng-class="[object Object]"><span _ngcontent-xmt-c27="" class="machperasly font-19">0<h6 _ngcontent-xmt-c27="" class="machnameper">.00%</h6></span><div _ngcontent-xmt-c27="" class="slice"><div _ngcontent-xmt-c27="" class="bar"></div><div _ngcontent-xmt-c27="" class="fill"></div></div></div></app-circular-progressbar><div _ngcontent-xmt-c28="" class="thmbinnerdiv1"><label _ngcontent-xmt-c28="">NewPart</label><h6 _ngcontent-xmt-c28="">Part Number</h6></div><div _ngcontent-xmt-c28="" class="thmbinnerdiv2 margin-top-10 margin-bottom-10"><label _ngcontent-xmt-c28="">00</label><h6 _ngcontent-xmt-c28="">Operation Number</h6></div><div _ngcontent-xmt-c28="" class="innerdiv2"><div _ngcontent-xmt-c28="" class="progress_summury"><label _ngcontent-xmt-c28="" class="firstsumry">0</label><label _ngcontent-xmt-c28="" class="secondsumry">0</label><label _ngcontent-xmt-c28="" class="numcount thirdsumry text-right">0</label></div><div _ngcontent-xmt-c28="" class="progress_summury"><h6 _ngcontent-xmt-c28="" class="firstsumry">Parts Produced</h6><h6 _ngcontent-xmt-c28="" class="secondsumry">Parts Rejected</h6><h6 _ngcontent-xmt-c28="" class="thirdsumry text-right">Target</h6></div></div><app-progressbar _ngcontent-xmt-c28="" ng-reflect-percentage="0"><div class="progress progress-line"><div role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" ng-reflect-ng-class="[object Object]" class="red-prg-bar" style="width: 0%;"><span class="sr-only"> 0 % Complete</span></div></div></app-progressbar><div _ngcontent-xmt-c28="" class="thmbinnerdiv3"><h6 _ngcontent-xmt-c28="">Total Downtime</h6></div><div _ngcontent-xmt-c28="" class="thmbinnerdiv5"><span _ngcontent-xmt-c28="" class="glyphicon glyphicon-time margin-right-5 color-red small"></span><label _ngcontent-xmt-c28="" class="margin-left-3">0h 0m </label></div></div><!--bindings={
"ng-reflect-ng-for-of": "[object Object]"
}--><!--bindings={
"ng-reflect-ng-if": "false"
}--></div><!--bindings={
"ng-reflect-ng-for-of": "[object Object]"
}--><!--bindings={
"ng-reflect-ng-if": "false"
}--></div></div><div _ngcontent-xmt-c28="" class="col-lg-4 col-md-6 col-sm-12 col-xs-12 machinedetailsinnerwrapper"><div _ngcontent-xmt-c28="" class="thumbnails machineblockdiv machineblockdivheight cursorpointer"><div _ngcontent-xmt-c28="" class="thmbinnerdiv"><h5 _ngcontent-xmt-c28="">TC-24</h5><!--bindings={
"ng-reflect-ng-if": "false"
}--><span _ngcontent-xmt-c28=""><img _ngcontent-xmt-c28="" src="./assets/Images/stopped1.png"></span><!--bindings={
"ng-reflect-ng-if": "true"
}--></div><div _ngcontent-xmt-c28="" tabindex="0" ng-reflect-router-link="/Machinedashboard" ng-reflect-query-params="[object Object]"><div _ngcontent-xmt-c28=""><app-circular-progressbar _ngcontent-xmt-c28="" _nghost-xmt-c27="" ng-reflect-percentage="0"><div _ngcontent-xmt-c27="" class="c100 p0 rounded-prgsbar red" ng-reflect-ng-class="[object Object]"><span _ngcontent-xmt-c27="" class="machperasly font-19">0<h6 _ngcontent-xmt-c27="" class="machnameper">.00%</h6></span><div _ngcontent-xmt-c27="" class="slice"><div _ngcontent-xmt-c27="" class="bar"></div><div _ngcontent-xmt-c27="" class="fill"></div></div></div></app-circular-progressbar><div _ngcontent-xmt-c28="" class="thmbinnerdiv1"><label _ngcontent-xmt-c28="">NewPart</label><h6 _ngcontent-xmt-c28="">Part Number</h6></div><div _ngcontent-xmt-c28="" class="thmbinnerdiv2 margin-top-10 margin-bottom-10"><label _ngcontent-xmt-c28="">00</label><h6 _ngcontent-xmt-c28="">Operation Number</h6></div><div _ngcontent-xmt-c28="" class="innerdiv2"><div _ngcontent-xmt-c28="" class="progress_summury"><label _ngcontent-xmt-c28="" class="firstsumry">0</label><label _ngcontent-xmt-c28="" class="secondsumry">0</label><label _ngcontent-xmt-c28="" class="numcount thirdsumry text-right">0</label></div><div _ngcontent-xmt-c28="" class="progress_summury"><h6 _ngcontent-xmt-c28="" class="firstsumry">Parts Produced</h6><h6 _ngcontent-xmt-c28="" class="secondsumry">Parts Rejected</h6><h6 _ngcontent-xmt-c28="" class="thirdsumry text-right">Target</h6></div></div><app-progressbar _ngcontent-xmt-c28="" ng-reflect-percentage="0"><div class="progress progress-line"><div role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" ng-reflect-ng-class="[object Object]" class="red-prg-bar" style="width: 0%;"><span class="sr-only"> 0 % Complete</span></div></div></app-progressbar><div _ngcontent-xmt-c28="" class="thmbinnerdiv3"><h6 _ngcontent-xmt-c28="">Total Downtime</h6></div><div _ngcontent-xmt-c28="" class="thmbinnerdiv5"><span _ngcontent-xmt-c28="" class="glyphicon glyphicon-time margin-right-5 color-red small"></span><label _ngcontent-xmt-c28="" class="margin-left-3">0h 0m </label></div></div><!--bindings={
"ng-reflect-ng-for-of": "[object Object]"
}--><!--bindings={
"ng-reflect-ng-if": "false"
}--></div><!--bindings={
"ng-reflect-ng-for-of": "[object Object]"
}--><!--bindings={
"ng-reflect-ng-if": "false"
}--></div></div><!--bindings={
"ng-reflect-ng-for-of": "[object Object],[object Object"
}--></div></div></div>
Any help is appreciated. Thanks
try with below code :
You need to tweak your xpath bit, use the below to get exact Machine name :
to handle stale element exception you may try solution given below :
in your
waitForVisibilityOfElements
method.