Xpaths div changing after every new build

Related searches

Im currently auotmating an web application using selenium java.For locating the elements Iam using relative xpaths. I am facing a problem regularly when ever I get a new build my xpath div values are changing. E.x:

Build 1:

//*[@id='container']/div/div/div/div/div[5]/div/ul/li[1]/div/ul/li[13]/button

Build 2:

//*[@id='container']/div/div/div/div/div[6]/div/ul/li[1]/div/ul/li[13]/button

How can we make this xpath work for every build? Even we are using this xpath for 'for loops' as well.

for (int i = 1; i <= 4; i++) {
    com.click("xpath","/html[1]/body[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[4]/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[2]/ul[1]/li[1]/div[2]/div[1]/ul[1]/li["+ i + "]/div[1]/span[2]/div[1]");         
}

Is there any solution to overcome this issue?

HTML Code:

<div id="container" xpath="1"><div><div class="ice-theme-provider light-theme css-aw120u e9snama0" data-automation-active-theme-name="light"><div tabindex="-1"><div class="css-1enaoom" data-automation-id="console" data-console-id="0" role="presentation"><div data-automation-id="application-menu-bar" class="css-1f2kwet"><ul class="css-qq4041" data-automation-id="system-menu"><li class="css-1tx6twl"><button type="button" class="ice-button css-5nd6tx e66scw10">File</button></li><li class="css-1tx6twl"><button type="button" class="ice-button css-5nd6tx e66scw10">Preferences</button></li><li class="css-1tx6twl"><button type="button" class="ice-button css-5nd6tx e66scw10">Connect Utils</button></li><li class="css-1tx6twl"><button type="button" class="ice-button css-5nd6tx e66scw10">Help</button></li></ul><span class="css-132uuf9"></span><button title="Tab Sorting: Manual (unsorted)" type="button" class="ice-button css-151om0c e66scw10">MANUAL</button><button title="click to unlock the layout"

<button aria-disabled="false" role="menuitem" tabindex="-1" type="button" class="ice-button e12espz23 css-1gkebzc e66scw10" style="" xpath="1"><span>Mark Field<span width="square" class="ice-icon ice-icon-caret-right css-19ah4i1 e5j0fb80"><svg viewBox="576 0 576 1792"><path d="M1152 896q0 26-19 45l-448 448q-19 19-45 19t-45-19-19-45v-896q0-26 19-45t45-19 45 19l448 448q19 19 19 45z"></path></svg></span></span></button>

An XPath expression with number data type inside a predicate is just an abbreviated form for comparison against position() function.

You might use as well this XPath only expression:

/html[1]/body[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[4]/div[1]/div[1]/div[1]/div[2]
  /div[1]/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[2]/ul[1]/li[1]/div[2]/div[1]/ul[1]
      /li[position() <= 4]/div[1]/span[2]/div[1]

How to handle dynamic changing ID's In XPath?, At this situation, We have lots of options-. Option 1: Look for any other attribute which Is not changing every time In that div node like name, class etc. So If this div� Your xpath-axes link is death.I want to try xpath-axes but firstly I need to analyze how the xpaths change. Have you got any idea how can I produce some examples for this condition? – limonik Feb 11 '19 at 12:54

xPath change when testing new builds - Support, when test new version builds many xPath of the element will change It will cost me a lot of time to change them, any better solution for this problem. Name property is valid only for label div what if there is text field, drop� Earlier generating xpaths used to be a tedious task but now with the help of Firebug and other tools, it became hell easy. But choosing the right and effective xpath is equally important and you cannot always rely on tools for the best decisions.

use below.

for (int i = 1; i <= 4; i++) {
driver.findElement(By.xpath("//button[@title='click to unlock the layout']")).click();

}

Complete Guide For Using XPath In Selenium With Examples , <div class="col-sm-12 link-sect"><p class="login-in-link test-left">Already have an account? The first two examples in the basic XPath list seems self-explanatory. This approach in creating XPath in Selenium comes handy when we have This is useful when partly values changes for a given attribute. $x('//div//p//*') == $('div p *'), $x('//[@id="item"]') == $('#item'), and many other Xpath examples. · One-page guide to Xpath

XPath in Selenium WebDriver: Complete Tutorial, XPath in Selenium WebDriver is used to find an element on the web page. Following, Ancestor, Child, Preceding, Following-sibling, Parent, Self, Descendant. /html/body/div[2]/div[1]/div/h4[1]/b/html[1]/body[1]/div[2]/div[1]/div[1 ]/h4[1]/b[1] It is used when the value of any attribute changes dynamically,� The most notable change is that XPath 2.0 is built around the XQuery and XPath Data Model (XDM) that has a much richer type system. Every value is now a sequence (a single atomic value or node is regarded as a sequence of length one). XPath 1.0 node-sets are replaced by node sequences, which may be in any order.

Writing reliable locators for Selenium and WebDriver tests – Firefox , That HTML changes and locators become incompatible are realities of writing and are familiar with the construction and syntax of CSS and Xpath locators. When writing a CSS or Xpath locator it's all about finding the balance The div with the id “main-section” makes a good anchoring element from� Sometimes, selecting every single kind of element isn't what we want to do because we might only want links (a tags) that are in a particular section (a div tag, here). We can write this: //div//a. This translate to: "Select all a tags that are somewhere nested underneath a table tag." You can see here what would be selected, and what wouldn't be:

Creating a new build script from the concordance file: The create_code_chunks() function uses a table from the Master Concordance file to generate a new build script. Note all one-to-one tables on the Master Concordance are numbered table-00.

Comments
  • I think there should a better way to write the xpath that you are using. Please share the html of the button starting from [@id='container'] element.
  • Its good if you ask developers to add id attribute to intractable elements like button, and u can use the id to locate the same.
  • Hi @Alejandro as my div values are changing after every new build even-though when I change to position() it may not work..
  • @krishna I don't understand your comment. This expression is going to be the same as for (int i = 1; i <= 4; i++) {com.click("xpath","/html[1]/body[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[4]/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[1]/div[1]/div[2]/div[1]/div[1]/div[2]/ul[1]/li[1]/div[2]/div[1]/ul[1]/li["+ i + "]/div[1]/span[2]/div[1]");} every time.
  • yes but when ever my build changes my xpath div values are changing..so it will work fine now once my build changes it will not work..
  • Hi @arkadiyala this did not worked as 'clicking on corporate reference sub options' is not the text in the xpath..