Java 在SeleniumWebDriver中查找CK编辑器并向其发送文本

Java 在SeleniumWebDriver中查找CK编辑器并向其发送文本,java,selenium-webdriver,Java,Selenium Webdriver,嗨,我正试图通过SeleniumWebDriver代码(Java)为我的项目找到CK编辑器。但每当我尝试使用SendKeys()方法时,它对我就不起作用。 下面是CK编辑器的屏幕截图和HTML代码 下面是代码 if(driver.findElement(By.cssSelector("iframe#scayt_8")).isEnabled()) { WebElement iframe = driver.findElement(By.cssSelector("iframe#scayt_8")

嗨,我正试图通过SeleniumWebDriver代码(Java)为我的项目找到CK编辑器。但每当我尝试使用SendKeys()方法时,它对我就不起作用。 下面是CK编辑器的屏幕截图和HTML代码

下面是代码

if(driver.findElement(By.cssSelector("iframe#scayt_8")).isEnabled())
{
  WebElement iframe = driver.findElement(By.cssSelector("iframe#scayt_8"));  
  System.out.println("Frame Enabled");
  if(driver.findElement(By.xpath("//iframe[@id = 'scayt_8']")).isDisplayed())           
  {           
    System.out.println("Frame Displayed");
    driver.switchTo().frame(iframe);
    iframe.clear();
    System.out.println("Clicking frame");
    iframe.click();
    iframe.sendKeys("Hello!!");
  }
}

请帮助我找到CK编辑器并向其发送文本。

我认为iframe是基于cssSelector进行搜索的,但我认为它应该基于id?这是斯盖特8号。您是否可以尝试使用以下代码来获取iframe而不是cssSelector:

driver.FindElement(By.TagName("iframe"))

切换到iframe后,尝试通过iframe中的段落标记名来定位webelement,如下所示:-

 WebElement body=driver.findElement(By.tagName("p"));
然后尝试使用此webelement发送密钥:

body.sendKeys("Hello!!");

您可能需要切换到内联帧来定位它

WebElement editorFrame = driver.findElement(By.id("scayt_8"));

driver.switchTo().frame(editorFrame);

WebElement body = driver.findElement(By.tagName("body"));

body.clear(); 
body.sendKeys("some text");
我们在《实践中的SeleniumWebDriver》一书的第3章中提供了与编辑器协作的技术

WebElement iframe = driver.findElement(By.tagName("iframe")); driver.switchTo().frame(iframe); 
WebElement tinymce = driver.findElement(By.tagName("body")); 
tinymce.clear(); 
tinymce.sendKeys("Hello, ckeditor!");;



这将帮助您在CKeditor中发送文本。试试这个。它将工作

我可以使用cssSelector定位帧,但问题是我无法向它发送关键帧。网页中也有2个框架,但我没有发现任何像body这样的内联框架。效果很好,谢谢。我只想添加一件事,在sendKeys之后,我必须运行“driver.switchTo().parentFrame();”,否则测试的其余部分将无法工作