Cách đặt kích thước cửa sổ trình duyệt mặc định trong Protractor / WebdriverJS


107

Vì một số lý do khi tôi chạy các bài kiểm tra của mình tại nơi làm việc, trình duyệt được phóng to tối đa, nhưng khi tôi chạy chúng ở nhà, nó chỉ mở ra một cửa sổ trình duyệt có chiều rộng khoảng 50%. Điều này gây ra một số khác biệt khi cuộn xuống, v.v., vì vậy tôi muốn để nó mở một cửa sổ trình duyệt có cùng kích thước trên mọi máy chạy thử nghiệm. Cách tốt nhất để làm điều này là gì? (Tôi đã tìm thấy một số câu trả lời cho các ngôn ngữ khác nhưng không thể điều chỉnh chúng thành javascript)

Thêm

browser.executeScript('window.moveTo(0,0);'+
    'window.resizeTo(screen.width, screen.height);');

không làm gì cả, (dường như window.moveTowindow.resizeTokhông được chrome hỗ trợ).


Tôi không có câu trả lời cho bạn vào lúc này, nhưng tôi có thể cho bạn biết điều đó window.moveTowindow.scrollTochắc chắn được Chrome hỗ trợ.
Colin Brock

scrollTo hoạt động. Nhưng những người khác thì không, ít nhất là không theo những gì tôi có thể nói. Hãy thử gõ nó vào bảng điều khiển ... không có gì cả.
jraede

Trước nguy cơ lạc đề, đây là một câu đố minh họa window.moveTowindow.resizeTo. Nó hoạt động tốt đối với tôi trong Chrome. Tôi không biết rằng bạn có thể thay đổi kích thước cửa sổ hiện tại từ bảng điều khiển trong Chrome, nhưng thực tế là resizeTophương pháp khả dụng ở đó cho thấy Chrome hỗ trợ nó.
Colin Brock

Ok, có vẻ như đang hoạt động cho các cửa sổ mới mà trình duyệt mở bằng JS. Nhưng không hoạt động với cửa sổ hiện tại, đó là những gì tôi cần.
jraede

1
Bài kiểm tra của tôi là để biết mọi thứ có hoạt động hay không và hiển thị trong các cấu hình đáp ứng khác nhau, vì vậy tôi cần có khả năng kiểm soát kích thước cửa sổ cho mỗi lần kiểm tra.
jraede

Câu trả lời:


191

Bạn có thể đặt kích thước trình duyệt mặc định bằng cách chạy:

var width = 800;
var height = 600;
browser.driver.manage().window().setSize(width, height);

Để tối đa hóa cửa sổ trình duyệt, hãy chạy:

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

Để đặt vị trí chạy:

var x = 150;
var y = 100;
browser.driver.manage().window().setPosition(x, y);

Nếu bạn gặp lỗi:

WebDriverError: unknown error: operation is unsupported with remote debugging

Thao tác không được hỗ trợ khi sử dụng gỡ lỗi từ xa Một số lệnh WebDriver (ví dụ: thay đổi kích thước cửa sổ trình duyệt) yêu cầu phải tải tiện ích mở rộng Chrome vào trình duyệt. ChromeDriver thường tải "tiện ích mở rộng tự động hóa" này mỗi khi khởi chạy một phiên Chrome mới.

Tuy nhiên, ChromeDriver có thể được hướng dẫn kết nối với phiên Chrome hiện có thay vì khởi chạy phiên mới. Điều này được thực hiện bằng cách sử dụng 'debuggerAddress' trong đối tượng Khả năng (hay còn gọi là ChromeOptions). Vì tiện ích mở rộng tự động hóa chỉ được tải khi khởi động, nên có một số lệnh mà ChromeDriver không hỗ trợ khi làm việc với các phiên hiện có thông qua gỡ lỗi từ xa.

Nếu bạn thấy lỗi "hoạt động không được hỗ trợ khi sử dụng gỡ lỗi từ xa", hãy thử viết lại bài kiểm tra để nó khởi chạy phiên Chrome mới. Điều này có thể được thực hiện bằng cách xóa 'debuggerAddress' khỏi đối tượng Khả năng.

Nguồn: https://sites.google.com/a/chromium.org/chromedriver/help/operation-not-supported-when-using-remote-debugging


10
Cũng có thể để tối đa hóa trình duyệt với kích thước toàn màn hình sử dụngbrowser.driver.manage().window().maximize();
Ben Smith

8
Nếu bạn muốn có cùng độ phân giải cho tất cả các bài kiểm tra của mình, bạn có thể gọi phần trên trong hàm của protractor.conf.jstệp onPrepare.
nwinkler

1
@BenSmith không chắc tại sao, nhưng browser.driver.manage().window().maximize();không thực sự tối đa hóa cửa sổ cho tôi. Tôi chỉ nhận được một cửa sổ lớn hơn một chút. Tôi chỉ kết thúc xác định chiều rộng và chiều cao với các setSize()phương pháp
jetcom

1
@AlexandrosSpyropoulos: nó sẽ hoạt động nhưng bạn phải đảm bảo rằng bạn không chạy xvfb ở một độ phân giải ngớ ngẩn nào đó. Ví dụ: theo mặc định, nó là 640x480.
Tadas Sasnauskas

1
@LeeGee Đã cập nhật câu trả lời.
Gấu trúc Răzvan Flavius

42

Bạn cũng có thể sử dụng của bạn config.jsđể đặt kích thước cửa sổ:

// config.js
specs: [
    ...
],
capabilities: {
    browserName: 'chrome',
    chromeOptions: {
        args: ['--window-size=800,600'] // THIS!
    }
}
// ....

bạn cần xóa dấu gạch ngang kép: args: ['window-size = 800,600']
ezain

3
Điều này hoạt động như mong đợi đối với tôi VỚI dấu gạch ngang kép như được hiển thị trong câu trả lời.
Monkpit

Điều này cũng đặt kích thước trình duyệt khi chạy tập lệnh e2e với args '--headless'. Điều này rất hữu ích nếu menu được chuyển sang chế độ xem trên thiết bị di động.
tony2tones

28

Nếu phương pháp ưu tiên:

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

không phù hợp với bạn (ví dụ: chạy thử nghiệm Thước đo trong Xvfb), thì bạn cũng có thể tối đa hóa cửa sổ theo cách này (protractor.conf.js):

onPrepare: function() {
    setTimeout(function() {
        browser.driver.executeScript(function() {
            return {
                width: window.screen.availWidth,
                height: window.screen.availHeight
            };
        }).then(function(result) {
            browser.driver.manage().window().setSize(result.width, result.height);
        });
    });
},

Phiên bản TypeScript:

import {Config, browser} from "protractor";

export let config: Config = {
    ...
    onPrepare: () => {
        setTimeout(() => {
            browser.driver.executeScript<[number, number]>(() => {
                return [
                    window.screen.availWidth,
                    window.screen.availHeight
                ];
            }).then((result: [number, number]) => {
                browser.driver.manage().window().setSize(result[0], result[1]);
            });
        });
    }
};

ideea tốt nhất với tự động lấy độ phân giải tối đa, nhưng bạn quên setPosition (0, 0) vì vậy nó sẽ được chính xác trên màn hình
Andrew

Rất tiếc, trình duyệt của tôi đã bắt đầu ở vị trí 0-0. Nhưng điểm tốt nếu ai đó cần nó.
Martin Sznapka

của tôi bắt đầu lúc ... 50,50 hoặc gì đó .. chỉ cần nói :)
Andrew

nó có thể phụ thuộc vào hệ điều hành, ở đây là Windows 8.1 chạy bên trong Hyper-V
Andrew

16

Tôi chỉ cần thêm mã bên dưới vào tệp protractor.conf.js của mình và nó hoạt động tốt.

onPrepare: function() {
    var width = 1600;
    var height = 1200;
    browser.driver.manage().window().setSize(width, height);
},

Mục đích của setTimeout và executeScript trong câu trả lời của bạn là gì? Tôi đấu tranh để tìm các phương pháp hay nhất trong tài liệu về thước đo góc ...

Theo suy nghĩ của tôi, sử dụng trực tiếp tối đa hóa () là một ý tưởng tồi và không phải là phương pháp ưa thích, vì nó sẽ không đặt cùng kích thước trên mọi máy nơi các thử nghiệm được thực hiện và có thể phá vỡ các hành vi đáp ứng.


4

Trong Selenium 4 (Thước đo góc 6), setRectthay thếsetSizesetPosition

Ví dụ,

browser.driver.manage().window().setRect({height: 600, width: 800});

3

Trong tệp Protractor.conf.js, thêm cấu hình sau

khả năng: {'browserName': 'chrome', chromeOptions: {args: ['start-maximized']}}


0

Sửa đổi tệp config.js của bạn như bên dưới.

 onPrepare: function () {
      browser.driver.manage().window().setSize(1280, 1024); //width , height

       }, 
 capabilities: {
browserName: 'chrome',
chromeOptions: {
args: [ "--start-maximized" ] // to start browser as maximixed 
         }
    },

-1

Thêm mã bên dưới, điều này sẽ tối đa hóa cửa sổ trình duyệt

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

Chào mừng bạn đến với stackoverflow. Đã có câu trả lời cung cấp thông tin này với nhiều giải thích hơn. Hãy đảm bảo rằng câu trả lời của bạn sẽ thêm một cái gì đó mới cho câu hỏi.
Simon.SA
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.