làm thế nào để sử dụng Thước đo góc trên trang web non-anglejs?


82

Tôi đã tìm thấy khung thước đo góc được tạo cho các ứng dụng web AngularJS.

Làm cách nào để sử dụng Thước đo góc trên trang web không sử dụng AngularJS?

Tôi đã viết thử nghiệm đầu tiên của mình và Thước đo góc kích hoạt thông báo này:

Error: Angular could not be found on the page https://www.stratexapp.com/ : retries looking for angular exceeded

Câu trả lời:


75

Nếu thử nghiệm của bạn cần tương tác với một trang không góc cạnh, hãy truy cập trực tiếp vào phiên bản webdriver với browser.driver.

Ví dụ từ tài liệu Thước đo góc

browser.driver.get('http://localhost:8000/login.html');

browser.driver.findElement(by.id('username')).sendKeys('Jane');
browser.driver.findElement(by.id('password')).sendKeys('1234');
browser.driver.findElement(by.id('clickme')).click();

2
chỉ là một câu hỏi ngớ ngẩn, đã by.idthay đổi thành By.id?
Val

7
@Val - global.by = global.By = thước đo góc.By; (nguồn - github.com/angular/protractor/commit/... )
Peer Eitan

Làm thế nào để tìm phần tử theo lớp và các phương tiện khác của các trang web không góc cạnh?
Easwaramoorthy K 14/10/16

@EaswaramoorthyK by.className. Tham khảo tài liệu
Murali KG

130

Một cách tiếp cận khác là đặt browser.ignoreSynchronization = true trước browser.get (...). Protractor sẽ không đợi Angular được tải và bạn có thể sử dụng cú pháp phần tử (...) thông thường.

browser.ignoreSynchronization = true;
browser.get('http://localhost:8000/login.html');

element(by.id('username')).sendKeys('Jane');
element(by.id('password')).sendKeys('1234');
element(by.id('clickme')).click();

5
Tôi thích cách tiếp cận này để giữ cho mã nhất quán trên bộ thử nghiệm.
joy

4
Đây chắc chắn là cách tiếp cận tốt nhất khi xử lý thước đo góc trên không góc cạnh. Có một bài đăng trên blog về điều này giải thích một số nội dung khác. Đối với những người tìm kiếm cho E2E, cũng có nightwatch.js , thực tập sinh , casperjs , webdriver
Ciro Costa

1
@Andrei Làm thế nào về pageObjects. khi tôi khai báo các phần tử bên ngoài khối chức năng và cố gắng chạy nó, nó hiển thị cho tôi đoạn mã NoSuchElementError: this.buttonOnLeftSide = browser.driver.findElement (by.className ('leftbutton')); this.iframe = 'emulatorFrame'; this.clickPlusSignOnTemplateEditor = function () {browser.driver.ignoreSynchronization = true; console.log ('hey'); browser.driver.switchTo (). frame (this.iframe); console.log ('bên trong iframe'); browser.sleep (3000); buttonOnLeftSide.click (); };
Nick

Chỉ cần đặt nó ở đây trong trường hợp ai đó gặp vấn đề tương tự như tôi. Hãy lưu ý cách làm này, nó tốt nhưng nếu bạn muốn nhanh chóng thất bại . Bạn có thể chạy thử nghiệm mãi mãi trong một số trường hợp / môi trường mặc dù thử nghiệm không thành công.
Linh Pham

tôi đang có hoa nhài.DEFAULT_TIMEOUT_INTERVAL sau khi tôi nhấp vào nút gửi. bất kỳ ý tưởng?
ji-ruh

16

waitForAngular bây giờ sẽ được sử dụng thay vì thuộc tính ignoreSynchronization không được dùng nữa.

Hướng dẫn waitForAngular sau đây được lấy từ tài liệu Protractor cho thời gian chờ:

Cách tắt tính năng chờ Angular

Nếu bạn cần điều hướng đến một trang không sử dụng Angular, bạn có thể tắt chế độ chờ Angular bằng cách đặt `browser.waitForAngularEnabled (false). Ví dụ:

browser.waitForAngularEnabled(false);
browser.get('/non-angular-login-page.html');

element(by.id('username')).sendKeys('Jane');
element(by.id('password')).sendKeys('1234');
element(by.id('clickme')).click();

browser.waitForAngularEnabled(true);
browser.get('/page-containing-angular.html');

hành vi của nó là buggy
Muneem Habib

2

Để kiểm tra trên trang web không góc cạnh, bạn nên xóa đồng bộ hóa. để sử dụng như sau:

browser.ignoreSynchronisation = true;
browser.get('url');

2

Trong một số trường hợp, để tránh lỗi cần thêm cả hai giá trị.

 browser.driver.ignoreSynchronization = true;
 browser.waitForAngularEnabled(false); 

Bạn có thể thêm chúng trong tệp spec.js.

describe('My first non angular class', function() {
    it ('My function', function() {
        browser.driver.ignoreSynchronization = true;
        browser.waitForAngularEnabled(false);

Hoặc như @Mridul được Đề xuất, thêm chúng vào tệp config.js.

export.config = {directConnect: true, framework: 'jasmine',

  onPrepare: function () {
         browser.driver.ignoreSynchronization = true;// for non-angular set true. default value is false 
         browser.waitForAngularEnabled(false);   // for non-angular set false. default value is true  
       },

Trong cách tiếp cận thứ hai, giả sử rằng bạn chỉ có các tập lệnh không có góc cạnh.
Sameera De Silva

1

Cá nhân tôi không đạt được thành công nào với các giải pháp được đề xuất vì các phần tử DOM không được tải đúng lúc.

Tôi đã thử nhiều cách để xử lý hành vi không đồng bộ đó, bao gồm cả browser.wait với browser.isElementPresent, nhưng không cách nào đáp ứng được.

Thủ thuật đang sử dụng Protractor trả về Promises từ các phương thức của nó trong onPrepare là gì:

onPrepare: () => {

    browser.manage().window().maximize();

    browser.waitForAngularEnabled(true).then(function () {
        return browser.driver.get(baseUrl + '/auth/');
    }).then(function () {
        return browser.driver.findElement(by.name('login')).sendKeys('login');
    }).then(function () {
        return browser.driver.findElement(by.name('password')).sendKeys('password');
    }).then(function () {
        return browser.driver.findElement(by.name('submit')).click();
    }).then(function () {
        return true;
    });

    return browser.driver.wait(function () {
        return browser.driver.getCurrentUrl().then(function (url) {
            return /application/.test(url);
        });
    }, 10000);
},

Tôi được truyền cảm hứng từ https://github.com/angular/protractor/blob/master/spec/withLoginConf.js


1
Nó không phải là browser.waitForAngularEnabled (false) thay vì true?
onluiz

1

thêm đoạn mã dưới đây vào tệp thông số kỹ thuật .js của bạn

beforeAll(function() {
    browser.waitForAngularEnabled(false);
});

1

Thêm đoạn mã sau vào tệp conf.js

   onPrepare: function () {
       browser.ignoreSynchronization = true;      
   }

1

Thêm đoạn mã dưới đây cho các ứng dụng không góc cạnh:

app- browser.ignoreSynchronization = true;

0

Sử dụng đoạn mã dưới đây trong tệp config.js của bạn cho các ứng dụng không góc cạnh-

browser.ignoreSynchronization = true;

và cho ứng dụng góc cạnh -

browser.ignoreSynchronization = false;

0

Tôi đang làm việc trên ứng dụng web aurelia , một khung công tác FE tương tự như Angular, React. Trong này tôi đang sử dụng Thước đo góc để tự động hóa.

Tech Stack dự án của tôi: -

  • Thước đo góc
  • Chữ viết
  • Phương thức đối tượng trang
  • Quả dưa chuột
  • Chai
  • nút
  • npm
  • Mã VS (IDE)

Thay đổi chính chỉ xảy ra trong tệp cấu hình, tôi có thể thêm mã vào github nếu điều đó có ích, đây là tệp cấu hình tôi đang sử dụng trong dự án của mình, tệp này hoạt động hoàn hảo đối với tôi. Đã đăng một số blog cũng như trong wordpress của tôi , hy vọng rằng có thể giúp được.

const reporter = require('cucumber-html-reporter');
exports.config = {
    SELENIUM_PROMISE_MANAGER: false,
    directConnect: true,
    specs: ["./e2e/features/*/EndToEnd.feature"],
    format: 'json:cucumberReport.json',
    framework: 'custom',
    frameworkPath: require.resolve('protractor-cucumber-framework'),
    cucumberOpts: {
        strict: true,
        format: 'json:cucumberReport.json',
        keepAlive: false,
        require: [
            './e2e/hooks/*.ts',
            './e2e/stepDefinition/*/*.ts',
        ],
       tags: '@Regression'
    },
    beforeLaunch: function () {
        require('ts-node/register')
    },
    onPrepare: async () => {
        await browser.waitForAngularEnabled(false);
        await browser.ignoreSynchronization == true;
        await browser.manage().window().maximize();
        await browser.manage().timeouts().implicitlyWait(10000);
     },
    onComplete: async () => {
         var options = {
            theme: 'bootstrap',
            jsonFile: './reports/cucumberReport.json',
            output: './reports/cucumberReport.html',
            reportSuiteAsScenarios: true,
            launchReport: false,
            screenshotsDirectory: './reports/screenshots',
            storeScreenshots: true,
            metadata: {
                "Test Environment": "SAND-DEV-1",
                "Platform": "Windows 10",
            }
        };
        reporter.generate(options);
    },
};

-5

Thay vì Thước đo góc, bạn có thể sử dụng e2e để kiểm tra Testcafe .
Ưu điểm:

  • Cú pháp ES2016
  • không cần thêm phụ thuộc, cấu hình và plugin trình duyệt
  • bộ chọn linh hoạt
  • thiết lập dễ dàng

6
@mlosev thân mến, điều này không trả lời trực tiếp cho câu hỏi. câu hỏi là "cách sử dụng trình bảo vệ ..." chứ không phải "tôi nên sử dụng thư viện nào thay vì Trình bảo vệ" :-)
Abdelkrim
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.