sara
sara

Reputation: 39

How to click on the element as per the HTML which is within a modal box through Selenium?

I'm automating some website in which I need to log out. I'm facing a hard time in this code:

WebDriverWait wait = new WebDriverWait(d, 10);
WebElement Category_Body = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("user logout")));
Category_Body.click();
d.findElement(By.id("logout_user")).click();
Thread.sleep(1000);

HTML:

<a class="user logout" title="Sign out" data-target="#confirm_popup" data-toggle="modal"></a>

Error:

org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"id","selector":"user logout"}

Upvotes: 0

Views: 61

Answers (3)

Ratmir Asanov
Ratmir Asanov

Reputation: 6459

Try the following code for that:

WebDriverWait wait = new WebDriverWait(d, 10);
WebElement Category_Body = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector(".user.logout")));
Category_Body.click();

PS: You can do this with ExpectedCondition.elementToBeClickable, also.

Hope it helps you!

Upvotes: 1

undetected Selenium
undetected Selenium

Reputation: 193088

As per your to locate the desired element to logout within the Model Box you need to induce WebDriverWait for the element to be clickable and you can use either of the the following options:

  • cssSelector:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("a.user.logout[title='Sign out'][data-toggle='modal']"))).click();
    
  • xpath:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//a[@class='user logout' and @title='Sign out'][@data-toggle='modal']"))).click();
    

Upvotes: 0

Muditha Perera
Muditha Perera

Reputation: 1252

I think the issue is with the identifier You have used

    WebElement Category_Body = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("user logout")));

But according to your HTML

<a class="user logout" title="Sign out" data-target="#confirm_popup" data-toggle="modal"></a>

The link have no id called "User Logout" With out using id try to use class By.findElementByClassName("user logout")

As a Second solution, try to use xpath ( which will work most of the time )

If both the solutions are not usable you can use the JavascriptExecutor ( The elements which are hard to capture can be easily handled with JavascriptExecutor )

NOTE: The main issue is with you using "user logout" when there is no such ID

Cheers

Upvotes: 0

Related Questions