3

分度器キュウリ フレームワークを使用して Monaco-editor の BDD テストを作成しています。少し前に、Monaco API と、エディタ内でプログラムによって値を設定する方法について知りました。しかし今回は、分度器を使用してモナコエディター内のテキストを取得できません。これが私のコードのサンプルです:

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」の値が null になり続けることです。BDD テストを実行すると、エディター内の値が「abracadabranull」に置き換えられます

エディタは、いくつかのデフォルト テキストで初期化されます。また、「setValue」関数が機能しているため、ブラウザー ドライバーは、エディターが読み込まれる iFrame を取得するのに問題はないと考えています。

どんな助けでも大歓迎です。

4

1 に答える 1

2

最終的に、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 + '")');
    }
    );

私を正しい方向に向けてくれたこの回答に感謝します。

于 2016-12-12T11:45:25.347 に答える