วิธีตั้งค่าขนาดหน้าต่างเบราว์เซอร์เริ่มต้นใน Protractor / WebdriverJS


107

ด้วยเหตุผลบางประการเมื่อฉันทำการทดสอบในที่ทำงานเบราว์เซอร์จะขยายใหญ่สุด แต่เมื่อฉันเรียกใช้ที่บ้านมันจะเปิดหน้าต่างเบราว์เซอร์ที่มีความกว้างประมาณ 50% เท่านั้น สิ่งนี้ทำให้เกิดความคลาดเคลื่อนในการเลื่อนลง ฯลฯ ดังนั้นฉันจึงอยากให้เปิดหน้าต่างเบราว์เซอร์ที่มีขนาดเท่ากันในทุกเครื่องที่ทำการทดสอบ วิธีใดดีที่สุดในการทำเช่นนี้ (ฉันพบคำตอบสำหรับภาษาอื่น ๆ แต่ไม่สามารถปรับให้เข้ากับจาวาสคริปต์ได้)

การเพิ่ม

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

ไม่ทำอะไรเลย (เห็นได้ชัดwindow.moveToและwindow.resizeToยังไม่ได้รับการสนับสนุนโดยโครเมี่ยม)


ฉันไม่ได้มีคำตอบสำหรับคุณในเวลานี้ แต่ผมสามารถบอกคุณได้ว่าwindow.moveToและwindow.scrollToได้รับการสนับสนุนแน่นอนโดย Chrome
Colin Brock

เลื่อนไปทำงาน แต่คนอื่น ๆ ไม่ทำอย่างน้อยก็ไม่ได้มาจากสิ่งที่ฉันสามารถบอกได้ ลองพิมพ์ในคอนโซล ... ไม่ทำอะไรเลย
jraede

ความเสี่ยงของการปิดหัวข้อที่นี่เป็นซอที่แสดงให้เห็นและwindow.moveTo window.resizeToมันใช้งานได้ดีสำหรับฉันใน Chrome ฉันไม่รู้ว่าคุณสามารถปรับขนาดหน้าต่างปัจจุบันจากคอนโซลใน Chrome ได้ แต่ความจริงที่ว่ามีresizeToวิธีนี้แสดงว่า Chrome รองรับ
Colin Brock

โอเคดูเหมือนว่าจะใช้งานได้กับหน้าต่างใหม่ที่เบราว์เซอร์เปิดด้วย JS แต่ใช้ไม่ได้กับหน้าต่างปัจจุบันซึ่งเป็นสิ่งที่ฉันต้องการ
jraede

1
การทดสอบของฉันคือดูว่าสิ่งต่างๆทำงานได้หรือไม่และสามารถมองเห็นได้ในการกำหนดค่าการตอบสนองที่แตกต่างกันดังนั้นฉันต้องสามารถควบคุมขนาดหน้าต่างสำหรับการทดสอบแต่ละครั้งได้
jraede

คำตอบ:


192

คุณสามารถกำหนดขนาดเบราว์เซอร์เริ่มต้นได้โดยเรียกใช้:

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

ในการขยายหน้าต่างเบราว์เซอร์ให้ใหญ่ที่สุด:

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

ในการกำหนดตำแหน่งการทำงาน:

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

หากคุณได้รับข้อผิดพลาด:

WebDriverError: unknown error: operation is unsupported with remote debugging

ไม่รองรับการทำงานเมื่อใช้การดีบักระยะไกลคำสั่ง WebDriver บางคำสั่ง (เช่นการปรับขนาดหน้าต่างเบราว์เซอร์) จำเป็นต้องโหลดส่วนขยายของ Chrome ลงในเบราว์เซอร์ โดยปกติ ChromeDriver จะโหลด "ส่วนขยายอัตโนมัติ" นี้ทุกครั้งที่เปิดเซสชัน Chrome ใหม่

อย่างไรก็ตาม ChromeDriver สามารถได้รับคำสั่งให้เชื่อมต่อกับเซสชัน Chrome ที่มีอยู่แทนที่จะเปิดตัวใหม่ ทำได้โดยใช้ 'debuggerAddress' ในออบเจ็กต์ Capabilities (aka ChromeOptions) เนื่องจากส่วนขยายระบบอัตโนมัติจะโหลดเมื่อเริ่มต้นเท่านั้นจึงมีบางคำสั่งที่ ChromeDriver ไม่รองรับเมื่อทำงานกับเซสชันที่มีอยู่ผ่านการดีบักระยะไกล

หากคุณเห็นข้อผิดพลาด "ไม่รองรับการดำเนินการเมื่อใช้การดีบักระยะไกล" ให้ลองเขียนการทดสอบใหม่เพื่อเปิดเซสชัน Chrome ใหม่ ซึ่งสามารถทำได้โดยการลบ 'debuggerAddress' ออกจากวัตถุ Capabilities

ที่มา: https://sites.google.com/a/chromium.org/chromedriver/help/operation-not-supported-when-using-remote-debugging


10
นอกจากนี้ยังสามารถขยายเบราว์เซอร์ให้เป็นขนาดเต็มหน้าจอโดยใช้browser.driver.manage().window().maximize();
Ben Smith

8
หากคุณต้องการมีความละเอียดเท่ากันสำหรับการทดสอบทั้งหมดของคุณคุณสามารถเรียกใช้ฟังก์ชันข้างต้นในprotractor.conf.jsไฟล์ของonPrepareคุณ
nwinkler

1
@BenSmith ไม่แน่ใจว่าทำไม แต่browser.driver.manage().window().maximize();ไม่ได้ขยายหน้าต่างให้ใหญ่สุด ฉันเพิ่งได้หน้าต่างที่ใหญ่ขึ้นเล็กน้อย ฉันเพียงแค่ระบุความกว้างและความสูงด้วยsetSize()วิธีการ
jetcom

1
@AlexandrosSpyropoulos: ควรใช้งานได้ แต่คุณต้องแน่ใจว่าคุณไม่ได้ใช้งาน xvfb ด้วยความละเอียดที่โง่ ๆ สำหรับเช่นโดยค่าเริ่มต้นคือ 640x480
Tadas Sasnauskas

1
@LeeGee คำตอบที่อัปเดต
Răzvan Flavius ​​Panda

42

คุณยังสามารถใช้config.jsเพื่อตั้งค่าขนาดหน้าต่าง:

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

คุณต้องลบเส้นประคู่: args: ['window-size = 800,600']
ezain

3
สิ่งนี้ได้ผลตามที่คาดไว้สำหรับฉันด้วยเส้นประคู่ดังที่แสดงในคำตอบ
พระภิกษุ

นอกจากนี้ยังกำหนดขนาดเบราว์เซอร์เมื่อเรียกใช้สคริปต์ e2e ด้วย args "--headless" ซึ่งจะมีประโยชน์หากเมนูถูกเลื่อนไปที่มุมมองมือถือ
tony2tones

28

หากวิธีการที่ต้องการ:

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

ไม่ได้ผลสำหรับคุณ (เช่นเรียกใช้การทดสอบไม้โปรแทรกเตอร์ใน Xvfb) จากนั้นคุณสามารถขยายหน้าต่างให้ใหญ่ที่สุดด้วยวิธีนี้ (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);
        });
    });
},

เวอร์ชัน 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]);
            });
        });
    }
};

อุดมคติที่ดีที่สุดพร้อม auto get max resolution แต่คุณลืม setPosition (0, 0) ดังนั้นมันจะอยู่ตรงหน้าจอ
Andrew

อืมเบราว์เซอร์ของฉันเริ่มต้นที่ตำแหน่ง 0-0 แล้ว แต่จุดที่ดีถ้ามีคนต้องการ
Martin Sznapka

ของฉันเริ่มที่ ... 50,50 หรืออะไรสักอย่าง .. แค่พูด :)
Andrew

อาจขึ้นอยู่กับระบบปฏิบัติการนี่คือ Windows 8.1 ที่ทำงานใน Hyper-V
Andrew

16

ฉันเพิ่งเพิ่มรหัสด้านล่างในไฟล์ protractor.conf.js ของฉันและมันก็ใช้งานได้ดี

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

setTimeout และ executeScript ทำหน้าที่อะไรในคำตอบของคุณ? ฉันพยายามหาแนวทางปฏิบัติที่ดีที่สุดในเอกสารไม้โปรแทรกเตอร์ ...

ในใจของฉันการใช้ maximize โดยตรง () เป็นความคิดที่ไม่ดีและไม่ควรเป็นวิธีที่ต้องการเนื่องจากจะไม่กำหนดขนาดเดียวกันในทุกเครื่องที่ดำเนินการทดสอบและอาจทำลายพฤติกรรมการตอบสนอง


4

ในซีลีเนียม 4 (ไม้โปรแทรกเตอร์ 6) setRectแทนที่setSizeและsetPosition

ตัวอย่างเช่น,

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


0

แก้ไขไฟล์ config.js ของคุณตามด้านล่าง

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

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

-1

เพิ่มโค้ดด้านล่างซึ่งจะขยายหน้าต่างเบราว์เซอร์ให้ใหญ่ที่สุด

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

ยินดีต้อนรับสู่ stackoverflow มีคำตอบที่ให้ข้อมูลนี้พร้อมคำอธิบายเพิ่มเติมมากมาย โปรดตรวจสอบว่าคำตอบของคุณมีอะไรใหม่ ๆ ให้กับคำถาม
Simon.SA
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.