Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Selenium и Wysiwyg editor (или как вставить текст в визивик) - 2


(Slim Bim) #1

Добрый день.
Совсем не хотелось создавать дубликат темы Selenium и Wysiwyg editor (или как вставить текст в визивик), но, как показывает практика, все случаи разные.
Так вот в чём моя проблема: на странице 3 фрейма iframe class=“wysihtml5-sandbox”, и webdriver всё никак не хочет switchTo любой фрейм не по индексу, не по webElement. ID нет.
Код до вставки текста и сохранения:


Вот после сохранения:

Так вот, как мне можно перейти во фрейм и послать текст?
Спасибо большое за внимание.


CkEditor - не вводится текст (Webdriver + Python)
(sidelnikovmike) #2

А вы уверены, что вам нужно переходить в iframe? у вас textarea лежит не в нем, а именно туда вы текст и запихали. Нет?


(sidelnikovmike) #3

А. Хотя у него display:none.
посмотрите, что происходит, когда вы начинаете вводить текст. input например появляется как только вы нажимаете на поле? Возможно в него надо текст пихать.


(Slim Bim) #4

Когда начинаешь вводить текст, он нигде не отображается, он отображается только потом, после submit and save form. Ввели текст и не отправили ещё ничего:


(Jane Tymoschuk) #5

а именно тот кусок кода, где вы переключаетесь во фреймы и начинаете работать с внутренними элементами, глянуть можно?


(Oleg Man) #6

попробуйте данный способ вроде все работало

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);
}

(Slim Bim) #8

Ребят, спасибо большое всем за советы, вот решение проблемы.
Пообщавшись немного с разработчиками элементами wysihtml5-sandbox, поняв принцип работы, написал вот такой JS скрипт:

$("#Recipe_description").data("wysihtml5").editor.setValue("Some text");

Смысл работы этого элемента:
есть textArea c id - Recipe_description, через неё обращаемся к wysihtml5 и только потом шлём наш текст.
И, как оказалось, работать с iframe совсем не нужно.
Спасибо ещё раз за внимание и помощь.