Добрый день.
Совсем не хотелось создавать дубликат темы Selenium и Wysiwyg editor (или как вставить текст в визивик), но, как показывает практика, все случаи разные.
Так вот в чём моя проблема: на странице 3 фрейма iframe class=“wysihtml5-sandbox”, и webdriver всё никак не хочет switchTo любой фрейм не по индексу, не по webElement. ID нет.
Код до вставки текста и сохранения:
Вот после сохранения:
Так вот, как мне можно перейти во фрейм и послать текст?
Спасибо большое за внимание.
А вы уверены, что вам нужно переходить в iframe? у вас textarea лежит не в нем, а именно туда вы текст и запихали. Нет?
А. Хотя у него display:none.
посмотрите, что происходит, когда вы начинаете вводить текст. input например появляется как только вы нажимаете на поле? Возможно в него надо текст пихать.
Когда начинаешь вводить текст, он нигде не отображается, он отображается только потом, после submit and save form. Ввели текст и не отправили ещё ничего:
а именно тот кусок кода, где вы переключаетесь во фреймы и начинаете работать с внутренними элементами, глянуть можно?
попробуйте данный способ вроде все работало
driver.Window.SwitchTo().Frame(“content_ifr”); //переключаемся в iframe
addTextInToTinyMCEField(“jform_articletext_ifr”, “какой-то текст для вставки”); //вставляем текст с помощью экзекьютора
@After
String verificationErrorString = verificationErrors.toString();
if (!"".equals(verificationErrorString)) {
fail(verificationErrorString);
}
}
private boolean isElementPresent(By by) {
try {
driver.findElement(by);
return true;
} catch (NoSuchElementException e) {
return false;
}
}
public static void addTextInToTinyMCEField(String iframeID, String theText)
{
String script =
"document.getElementById('" +
iframeID +
"').contentWindow.document.getElementById('tinymce').innerHTML ='" +
theText +
"';";
js.executeScript(script);
}
Ребят, спасибо большое всем за советы, вот решение проблемы.
Пообщавшись немного с разработчиками элементами wysihtml5-sandbox, поняв принцип работы, написал вот такой JS скрипт:
$("#Recipe_description").data("wysihtml5").editor.setValue("Some text");
Смысл работы этого элемента:
есть textArea c id - Recipe_description, через неё обращаемся к wysihtml5 и только потом шлём наш текст.
И, как оказалось, работать с iframe совсем не нужно.
Спасибо ещё раз за внимание и помощь.