【问题标题】:How to use sendKeys into ckeditor text area using java selenium如何使用 java selenium 将 sendKeys 用于 ckeditor 文本区域
【发布时间】:2017-01-10 02:57:36
【问题描述】:

如何在 java selenium 中将键发送到到达文本区域。

这是包含 Iframe 的 HTML 代码:

<div class="col-sm-11">
<textarea class="ckeditor ng-untouched ng-empty ng-invalid ng-invalid-required ng-dirty ng-valid-parse" ng-class="{true:'validation-error'}[submitted]" placeholder="Enter text ..." ck-editor="" ng-model="NewTicket.Message" name="Message" style="visibility: hidden; display: none;" aria-invalid="true"/>
<div id="cke_Message" class="cke_1 cke cke_reset cke_chrome cke_editor_Message cke_ltr cke_browser_gecko" lang="en" aria-labelledby="cke_Message_arialbl" role="application" dir="ltr">
<span id="cke_Message_arialbl" class="cke_voice_label">Rich Text Editor, Message</span>
<div class="cke_inner cke_reset" role="presentation">
<span id="cke_1_top" class="cke_top cke_reset_all" style="height: auto; -moz-user-select: none;" role="presentation">
<div id="cke_1_contents" class="cke_contents cke_reset" role="presentation" style="height: 200px;">
<span id="cke_50" class="cke_voice_label">Press ALT 0 for help</span>
<iframe class="cke_wysiwyg_frame cke_reset" frameborder="0" src="" style="width: 100%; height: 100%;" title="Rich Text Editor, Message" aria-describedby="cke_50" tabindex="0" allowtransparency="true"/>
</div>
</div>
</div>
<span class="ng-binding ng-hide" style="color:red" ng-show="newTicketForm.Message.$invalid && submitted" aria-hidden="true">Content is required</span>
</div>

我尝试使用下面的方法使用 Iframe 类名,但我无法向它发送数据。这是 Selenium 代码

for (String handle002 : driver.getWindowHandles()) 
    {
        driver.switchTo().window(handle002);
        Thread.sleep(500);
          for (String handle001 : driver.getWindowHandles()) 
            {
    driver.switchTo().window(handle001);
    Thread.sleep(500);
  driver.switchTo().frame(driver.findElement(By.className("cke_wysiwyg_frame cke_reset")));
  driver.switchTo().defaultContent();
  WebElement body=driver.findElement(By.className("cke_wysiwyg_frame cke_reset"));
  body.sendKeys("Test");
  driver.switchTo().defaultContent();
            }
    }

【问题讨论】:

  • 但是这里的文本区域元素看起来在 iframe 之外,那你为什么要切换框架呢??
  • 你能分享一下iframe里面的HTML代码吗?让我们知道你想在哪里设置值,在上面的文本区域还是在 iframe 文本区域内??
  • 还有告诉我为什么要切换到窗口???这个文本编辑器是在新窗口中打开吗??
  • 其实不需要添加切换窗口。它没有打开单独的窗口。对于整个 Reach 文本区号,我添加了。如果你给,但它有很多功能。
  • 你想在这个文本区域&lt;textarea class="ckeditor ng-untouched ng-empty ng-invalid ng-invalid-required ng-dirty ng-valid-parse"&gt;发送密钥吗??

标签: javascript java selenium iframe automated-tests


【解决方案1】:

在看到您提供的 HTML 后,我得到了解决方案,您应该尝试使用 WebDriverWait,如下所示:-

WebDriverWait wait = new WebDriverWait(driver, 10);

wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.cssSelector("iframe.cke_wysiwyg_frame.cke_reset")));

WebElement body = wait.until(ExpectedConditions.visibilityOfElementLocated(By.tagName("body")));
body.sendKeys("Test String");

//Now after entering text into texteditor switch back to default content 
driver.switchTo().defaultContent();

【讨论】:

  • 谢谢它的作品。你能告诉我必须使用哪些场景吗?在我添加到此代码并添加下面的代码并单击事件但它不起作用driver.findElement(By.cssSelector(".btn.btn-chatcust1.ng-binding")).click(); 但我在文本区域 itz 工作之前添加的相同代码之后又进行了一个任务。
  • 在文本框内执行driver.switchTo().defaultContent();之后,您需要切换到默认内容,然后使用其他内容
猜你喜欢
  • 2018-06-08
  • 2019-03-22
  • 1970-01-01
  • 2012-11-21
  • 2011-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
相关资源
最近更新 更多