Как протестировать AngularJs с помощью транспортира, который можно использовать с модификатором 'bold', не работает с момента обновления веб-драйвера - PullRequest
0 голосов
/ 24 сентября 2019

Рассмотрим это приложение AngularJs

<!DOCTYPE html>
<html>
<head>
<title>
AngularJs insert text after bold checked
</title>
<script src="lib/angular/angular.js"></script>
<script type="text/javascript">
    var app = angular.module('ngTestBoldInsert', []);
    app.controller('ngCtrl', function ($scope) {
        $scope.boldButtonClicked = function () {            
            document.execCommand('bold', false, null);
        };
    });
</script>
</head>
<body>
<div ng-app="ngTestBoldInsert" ng-controller="ngCtrl">
<h2>Edit text after click on checkbox</h2>
<label for="boldButtonId">Bold</label>
<input id="boldButtonId" type="checkbox" ng-change="boldButtonClicked()" ng-model="boldStatus">
<br /><br />
    <div id="textFrame" contenteditable="true" style="padding:10px; border:1px solid black; width:30%; ">text</div>
</div>
    <p>Manual: click on edit frame, input text, Click on 'bold' checkbox. click on edit frame, input some text. Now the text is bold. <br /><br />Please note that this is a simplification, in real application the bold button status is synced with the status of the text but that would make this example very complicated.</p>
</body>
</html>

И этот тест транспортира:

'use strict';


describe('text editor', function() {


    var textFrame = element(by.id('textFrame'));    
    var boldCheckbox = element(by.id('boldButtonId'));


    it('should insert normal text', function() {
        browser.get('index.html#!/');
        var text = textFrame.getText();
        expect(text).toBe('text');
        textFrame.click();
        textFrame.sendKeys(' plus normal text');
        text = textFrame.getText();
        expect(text).toBe('text plus normal text');

        var html = browser.executeScript("return arguments[0].innerHTML;", textFrame);
        expect(html).toBe('text plus normal text');
    });

    it('should insert bold text', function() {
        boldCheckbox.click();
        textFrame.click();
        textFrame.sendKeys('plus bold text');

        var text = textFrame.getText();
        expect(text).toBe('text plus normal textplus bold text');

        var html = browser.executeScript("return arguments[0].innerHTML;", textFrame);
        expect(html).toBe('text plus normal text<b>plus bold text</b>');
    });

});

Этот тест работает, пока chromedriver_76.0.3809.68

и не будет разбит в chromedriver_77.0.3865.40

вызвано обновлением веб-драйвера: https://bugs.chromium.org/p/chromedriver/issues/detail?id=2704

Текст больше не выделен жирным шрифтом в тесте.

вывод теста:

Expected 'text plus normal textplus bold text' to be 'text plus normal text<b>plus bold text</b>'.

Как проверить это сейчас?

1 Ответ

1 голос
/ 25 сентября 2019

Прежде всего, попробуйте element.getAttribute("innerHTML")

Если это не поможет, выполните element.getAttribute("outterHTML"), и он вернет вам строку, подобную <div id="textFrame" contenteditable="true" style="padding:10px; border:1px solid black; width:30%; ">text plus normal text<b>plus bold text</b></div>, так что тогда просто сделайте expect(html).toContain('text plus normal text<b>plus bold text</b>');

В худшем случае, если вы не хотите идти по этому пути, у вас нет других вариантов, кроме как сообщить об ошибке с командой chromedriver, которую я бы посоветовал сделать в любом случае, так как ее усилия предпринимаются сообществом

...