GreenTree
GreenTree

Reputation: 53

msg no such element: Unable to locate element:

HTML:

"Add to cart" object

<button class="button spin-button prod-ProductCTA--primary button--primary" data-automation-id="button" data-tl-id="ProductPrimaryCTA-cta_add_to_cart_button" type="button"><span class="button-wrapper"><span class="spin-button-children">Add to cart</span></span></button>

"Get in stock alert" object

<button class="button spin-button prod-ProductCTA--primary button--primary" data-automation-id="button" data-tl-id="cta_oos_button" aria-expanded="false" aria-label="get in stock alert" role="button" tabindex="0" type="button"><span class="button-wrapper"><span class="spin-button-children">Get in-stock alert</span></span></button>

I do not want to click "Add to cart". I just want to store locator info in WebElement "addToCart". Because objects have very identical properties, I chose this unique property "data-tl-id" but did not work.

Web Driver

WebElement addToCart = driver.findElement(By.xpath("//button[@data-tl-id='ProductPrimaryCTA-cta_add_to_cart_button']"));

Below worked for me but both above objects have the same class name so i cant use the class name.

WebElement addToCart  = driver.findElement(By.xpath("//span[@class='button-wrapper']"));

I also tried below ways but none worked for me.

WebElement addToCart = driver.findElement(By.xpath("//span[text()='Add to cart'"));

WebElement addToCart = driver.findElement(By.xpath("//span[contains(@text,'Add to cart')]"));

I get error "No such element: Unable to locate element: ". How to locate the "Add to cart" object?

Upvotes: 0

Views: 214

Answers (2)

SeleniumUser
SeleniumUser

Reputation: 4177

Your xpath is wrong WebElement addToCart = driver.findElement(By.xpath("//span[text()='Add to cart'"));

Try below solution

WebDriverWait wait = new WebDriverWait(driver, 30);
WebElement webElement = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[text()='Add to cart']")));
System.out.println("Printing "+webElement.getText());

Or you can also try xpath with contains

WebDriverWait wait = new WebDriverWait(driver, 30);
WebElement webElement = wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//span[contains(text(),'Add to cart')]")));
System.out.println("Printing "+webElement.getText());
    

Upvotes: 2

Ankit Agrawal
Ankit Agrawal

Reputation: 257

since this xpath worked for you,

WebElement addToCart  = driver.findElement(By.xpath("//span[@class='button-wrapper']"));

Use this to uniquely identify WebElement

driver.findElement(By.xpath("//button[contains(@data-tl-id,'cart')]/span[@class='button-wrapper']"))

you can also use this xpath

//span[contains(text(),'Add to cart')]

Upvotes: 1

Related Questions