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

C помощью Selenium Webdriver не могу ввести текст в редактор tinymce


(Владимир) #1

Всем, доброе время суток!
Пишу тут впервые, поэтому не судите строго. Есть проблема, с помощью Selenium Webdriver (немного пишу на Java) не могу ввести текст в редактор tinymce. Есть следующий код страницы:


<iframe id="news_globalize_translations_attributes_ru_content_ifr" frameborder="0" src="javascript:allowtransparency="true" title="Rich Text AreaPress ALT-F10 for toolbar. Press ALT-0 for help" style="width: 100%; height: 100px; display: block;">
#document
    <!DOCTYPE >
    <html>
        <head xmlns="http://www.w3.org/1999/xhtml">
            <meta content="text/html; charset=UTF-8" http-equiv="Content-Type"></meta>
            <link href="http://my.20.local/javascripts/tiny_mce/themes/advanced/skins/default/content.css" rel="stylesheet" type="text/css"></link>
            <style charset="utf-8" type="text/css">

                /* See license.txt for terms of usage */
                /** reset…

            </style>
            <style charset="utf-8" type="text/css"></style>
        </head>
        <body id="tinymce" class="mceContentBody " contenteditable="true" onload="window.parent.tinyMCE.get('news_globalize_translations_attributes_ru_content').onLoad.dispatch();" spellcheck="false" dir="ltr">
            <p

Использую следующий код:

driver.switchTo().frame("news_globalize_translations_attributes_ru_content_ifr");
driver.findElement(By.id("tinymce")).clear();
driver.findElement(By.id("tinymce")).click();
driver.findElement(By.id("tinymce")).sendKeys("Text");

В итоге, на нужное место ставится курсор, но текст не вводится.

Также пробывал:
1.

driver.findElement(By.xpath(".//*[@id='tinymce']")).sendKeys("Текст");
WebElement body = driver.findElement(By.cssSelector("#tinymce"));
body.clear();
body.sendKeys("This is a test of the mce editor\n\nDarrell was	here!\n");
driver.findElement(By.xpath(".//*[@id='tinymce']")).clear();;
String inputData="Текст";
driver.findElement(By.xpath(".//*[@id='tinymce']")).sendKeys(inputData);
WebElement body = driver.findElement(By.cssSelector("#tinymce>p/br"));
String inputData="Текст";
driver.findElement(ui(inputLocator)).sendKeys(inputData);
driver.findElement(By.cssSelector("#tinymce>p")).sendKeys("Text");
WebElement body = driver.findElement(By.xpath(".//*[@id='tinymce']/p"));
body.clear();
body.sendKeys("This is a test of the mce editor\n\nDarrell was	here!\n");

В некоторых случаях даже курсор не появляется на нужном месте.


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

Это мой питонкод

driver.switch_to_frame('wysiwyg_iframe')
driver.find_element_by_css_selector('.mceContentBody').click()
driver.find_element_by_css_selector('.mceContentBody').send_keys(text)

Суть на java будет такой же.
Нужно перключиться на фрейм, а потом вводить в тело текст.
Где-то должен быть такой элемент

<iframe id = 'wysiwyg_iframe' .......>

(Владимир) #3

переход был осуществлен driver.switchTo().frame(“news_globalize_translations_attributes_ru_content_ifr”); и драйвер находит все элементы, которые находятся внутри iframe


(Andrey Kim) #4

Может попробовать без Clear или поставить между кликом и вводом задержку, не уверен в этом, просто как вариант.


(vmaximv) #5

Вы не указали ни браузер ни его версию, ни версию драйвера, ни версию селениума


(Владимир) #6

Env: Win 7, Firefox 23.0.1, selenium-server-standalone-2.38.0


(Владимир) #7

Увы, проблема не в задержке.


(Александр Таранков) #8
  1. Я так понимаю после загрузки страницы происходит вызов какого-то js-метода, что он делает? Может там ajax-ом что-то грузится? Думаю стоит для начала попробовать просто sleep поставить секунд на 10, чтоб все активности улеглись
  2. Почему текст вводится в тэг body?
  3. Какую ошибку пишет selenium? Stacktrace

(Владимир) #9
  1. Я практически ничего не понял из данного вопроса, но, как я уже писал, sleep не дает положительного результата.
  2. А куда он должен вводиться? я пробывал вводить в id(“tinymce”) и в cssSelector("#tinymce>p") в первом случае селениум хотябы курсор ставит в необходимен место. во втором данного действия не происходит
  3. Селениум не выдает ошибок, пишет, что тест прошел успешно.

(Александр Таранков) #10

В тэг body, как и в тэг p текст не вводится. Это невидимые тэги. Текст вводится в текстовые поля.

Попробуй поисследовать структуру документа Firebug-ом или аналогичными инструментами и с помощью них найти куда текст вводится


(vmaximv) #11

Нет. Тайпать нужно именно в боди - это типичный reach editor. Вот только проблемы с ними у меня встречались исключительно с хромом и сафари.
Полноценно ответить смогу в понедельник. А пока могу посоветовать ТС:

  1. Обновить ФФ
  2. Попробовать Actions
  3. Сетать у body аттрибут innerText через js

(Mykhailo Poliarush) #12

Добавлю пару смежных ссылок на обсуждения

В общем, скорее всего вам надо вставлять через javascript ваши данные

document.some_element.innerHTML = "something value to put in editor"

Посмотрите, вышеуказанные ссылки


(vmaximv) #13

WinXPSP3+FF23+Sel2.33 - все ок
WinXPSP3+FF23+Sel2.38 - все не ок
WinXPSP3+FF24+Sel2.38 - все ок

Следует помнить, что официально супортятся n, n-1, esr, esr-1 версии ФФ - http://ci.seleniumhq.org:8080/view/Firefox%20Windows%20Tests/

Если использование ФФ23 принципиально - понижайте версию селениума и наоборот.

Если нужна именно эта связка - тогда только js и можно попробовать выписать на это баг http://code.google.com/p/selenium/issues/list.

	@Test
	public void test() {
		WebDriver driver = new FirefoxDriver();
		try {
			driver.manage().window().maximize();
			driver.get("http://www.tinymce.com/tryit/classic.php");
			driver.switchTo().frame("content_ifr");
			WebElement body = driver.findElement(By.xpath("//body"));
			body.sendKeys("WebDriver!");
			Assert.assertTrue(body.getText().startsWith("WebDriver!"));
		} finally {
			driver.quit();
		}
	}

(Владимир) #14

Обновил FF до 26 ситуация не изменилась. Ваш тест также не отрабатывает.


(vmaximv) #15

С 26 вы погорячились:

v2.39.0
=======
WebDriver:
 * Update to support native events for Firefox 26.

(Владимир) #16

Обновил selenium до 39.0. (FF 26) Все заработало
Рабочий код
driver.switchTo().frame(“news_globalize_translations_attributes_ru_content_ifr”);
driver.findElement(By.id(“tinymce”)).sendKeys(“Text”);
driver.switchTo().defaultContent();

Всем огромное спасибо!!!