Невозможно получить текст внутри редактора monaco с помощью транспортира

Пишу BDD-тесты для Monaco-Editor с использованием фреймворка транспортир-огурец. Некоторое время назад я узнал об API Монако и о том, как программно установить значение внутри редактора. Но на этот раз я не могу получить текст в редакторе Monaco с помощью транспортира. Вот образец моего кода:

browser.ignoreSynchronization = true;
        let driver = browser.driver;
        // iframe ids

       let iframeID = 'editorFrame';

       let editorSpanXpath = '//div[@id="editorContainer"]//div[contains(@class, "monaco- editor")]//div[contains(@class, "editor-scrollable")]'
      // switching to the iFrame to perform tasks inside it
        browser.switchTo().frame(iframeID);

    // clicking on a div inside the editor to ascertain that
    // the browser knows where to  run the script

        driver.findElement(by.xpath(editorSpanXPath)).click();
         browser.executeScript('this.monaco.editor.getModels()[0].getValue()').then(function(editorText){
               let replaceString = 'abracadbra' + editorText
               browser.executeScript('this.monaco.editor.getModels()[0].setValue("' + replaceString + '")');
        }
        );

Проблема здесь в том, что значение "editorText" по-прежнему равно нулю. При запуске моих тестов BDD значение в редакторе заменяется на 'abracadabranull'

Редактор инициализируется некоторым текстом по умолчанию. И поскольку функция setValue работает, я полагаю, что у драйвера браузера нет проблем с получением iFrame, в который загружается редактор.

Любая помощь будет оценена.


person Shubhang    schedule 08.12.2016    source источник


Ответы (1)


В конце концов, положение спасло простое выражение return:

browser.ignoreSynchronization = true;
    let driver = browser.driver;
    // iframe ids

   let iframeID = 'editorFrame';

   let editorSpanXpath = '//div[@id="editorContainer"]//div[contains(@class, "monaco- editor")]//div[contains(@class, "editor-scrollable")]'
  // switching to the iFrame to perform tasks inside it
    browser.switchTo().frame(iframeID);

// clicking on a div inside the editor to ascertain that
// the browser knows where to  run the script

    driver.findElement(by.xpath(editorSpanXPath)).click();
     browser.executeScript('return this.monaco.editor.getModels()[0].getValue()').then(function(editorText){
           let replaceString = 'abracadbra' + editorText
           browser.executeScript(' return this.monaco.editor.getModels()[0].setValue("' + replaceString + '")');
    }
    );

Большое спасибо этому ответ за то, что указал мне в правильном направлении.

person Shubhang    schedule 12.12.2016
comment
await driver.executeScript(' return this.monaco.editor.getModels()[0].setValue("' + text + '")'); у меня сработало !! - person Pratik Patel; 19.06.2019