Reputation: 281
I have an input box like the one I am using here to enter my question, and whose HTML is
<body id="tinymce" class="mce-content-body" contenteditable="true" onload="window.parent.tinymce.get('Description').fire('load');" spellcheck="false" style="padding-bottom: 50px; padding-left: 1px; padding-right: 1px; overflow-y: hidden;">
<p>
<br data-mce-bogus="1"/>
</p>
</body>
Every-time, I try to enter some text to it
@FindBy(xpath="//body[@id='tinymce']") WebElement Category_Body;
Category_Body.sendKeys("Android Smart Phone - 16GB");
I get the error -
org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"xpath","selector":"//body[@id='tinymce']"}
Upvotes: 5
Views: 86938
Reputation: 23805
If you are getting NoSuchElementException
as your provided exception, There may be following reasons :-
May be when you are going to find element, it would not be present on the DOM
, So you should implement WebDriverWait
to wait until element visible as below :-
WebDriverWait wait = new WebDriverWait(driver, 10);
WebElement Category_Body = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("tinymce")));
Category_Body.sendKeys("Android Smart Phone - 16GB");
May be this element is inside any frame
or iframe
. If it is, you need to switch that frame
or iframe
before finding the element as below :-
WebDriverWait wait = new WebDriverWait(driver, 10);
//Find frame or iframe and switch
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("your frame id or name"));
//Now find the element
WebElement Category_Body = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("tinymce")));
Category_Body.sendKeys("Android Smart Phone - 16GB");
//Once all your stuff done with this frame need to switch back to default
driver.switchTo().defaultContent();
Upvotes: 15