Selenium Java unable to locate element using xpath

288 Views Asked by At

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 enter image description here

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

1

There are 1 best solutions below

4
On

try with below code :

List<WebElement> machineNames = driver.findElements(by.xpath("//div[@class='thmbinnerdiv']"));
for(WebElement machine : machineNames){
 System.out.println(machine.getText());
}

You need to tweak your xpath bit, use the below to get exact Machine name :

//div[@class='thmbinnerdiv']/h5

to handle stale element exception you may try solution given below :

new WebDriverWait(driver, timeout).ignoring(StaleElementReferenceException.class).until(ExpectedConditions.visibilityOfElement(locator));

in your waitForVisibilityOfElements method.