5

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']"}

Saurabh Gaur
  • 23,507
  • 10
  • 54
  • 73
Bimlesh
  • 269
  • 2
  • 9
  • 20

1 Answers1

14

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();
    
Saurabh Gaur
  • 23,507
  • 10
  • 54
  • 73
  • 1
    Thanks - it worked. There is a frame and after switching to the frame - I was able to enter the value to the input box. – Bimlesh Aug 30 '16 at 07:35
  • this didn't work for me, this solution did however : https://stackoverflow.com/questions/7534622/selecting-an-iframe-using-python-selenium – Tom Oct 06 '17 at 14:05