ส่งคีย์ไม่ทำงานกับ Page Object Model

ฉันเพิ่งเริ่มทดลองกับ Page Object Models โดยใช้ Protractor ในแอปพลิเคชันที่ไม่ใช่เชิงมุม ฉันไม่ใช่มือใหม่ แต่ไม่มีที่ไหนใกล้ผู้เชี่ยวชาญ ดังนั้นขออภัยหากการใช้คำฟุ่มเฟือยของฉันผิดพลาดทั้งหมด ฉันค้นคว้าและลองใช้คำแนะนำมาหลายวันแล้วโดยไม่มีโชค ฉันมีองค์ประกอบนี้-

<input type="text" class="form-control" name="form_component_data[AgentsSettings][agent][chat_welcome_msg]" id="agentssettings-agent-chat_welcome_msg" value="How can I help">

ใน POM ของฉันฉันมี

var txtWelcomemessage = element(by.css("input[name='form_component_data[AgentsSettings][agent][chat_welcome_msg]']"));

    this.clearWelcomemessage = function(){
    txtWelcomemessage.clear();
    };

    this.clearWelcomemessage = function(){
    txtWelcomemessage.clear();
    };

    this.setWelcomemessage = function(){
    txtWelcomemessage.sendKeys();
      };

ในสคริปต์ทดสอบของฉันฉันมี

settings.clearWelcomemessage();
browser.sleep('5000');

settings.setWelcomemessage('Hey, Hey, Hey');
browser.sleep('5000');

ล้างข้อความใช้งานได้ ฉันเห็นเคอร์เซอร์ในช่องหลังจากล้างข้อความ แต่ปุ่มส่งไม่ได้ทำอะไรเลยและไม่มีข้อผิดพลาด

อย่างไรก็ตาม เมื่อฉันป้อนโค้ดด้านล่างลงในสคริปต์ทดสอบโดยตรง ข้อความจะถูกล้างและปุ่มส่งทำงานได้อย่างสมบูรณ์

driver.findElement(by.css("input[name='form_component_data[AgentsSettings][agent] 
[chat_welcome_msg]']")).click();
browser.sleep('3500')
driver.findElement(by.css("input[name='form_component_data[AgentsSettings][agent] 
[chat_welcome_msg]']")).sendKeys('Hey, Hey, Hey');

นี่เป็นฟิลด์ที่ 3 ที่ฉันกำลังทำงานด้วยในแอปพลิเคชันจนถึงตอนนี้ สองช่องแรกทำงานโดยใช้ POM โดยไม่มีปัญหาใดๆ ฉันไม่แน่ใจว่าสิ่งนี้แตกต่างอย่างไร ฉันสามารถใช้สิ่งนี้เป็นวิธีแก้ปัญหาได้ แต่ฉันแค่สงสัยว่าฉันขาดอะไรไปในวัตถุหน้า


person Devy16    schedule 06.07.2021    source แหล่งที่มา
comment
จริงๆ แล้วคุณ await เป็นฟังก์ชันหรือเปล่า? settings.clearWelcomemessage() และ browser.sleep() คือ async โปรดลองเพิ่มคำสั่ง console.log() ระหว่างแต่ละการกระทำและตรวจสอบว่า sleep ใช้งานได้จริงหรือไม่   -  person Silvan Bregy    schedule 08.07.2021
comment
@SilvanBregy สมมติว่าฉันทำสิ่งนี้อย่างถูกต้องดูเหมือนว่าการนอนหลับกำลังเกิดขึ้น นี่คือสิ่งที่ฉันใช้ settings.clearWelcomemessage(); browser.sleep('5000').then(console.log('ข้อความถูกล้าง')); settings.setWelcomemessage('เฮ้ ฉันจะช่วยได้อย่างไร'); browser.sleep('5000').then(console.log('ใส่ข้อความยินดีต้อนรับ'));   -  person Devy16    schedule 08.07.2021


คำตอบ (1)


หากรหัสจริงของคุณมีลักษณะดังนี้:


settings.clearWelcomemessage();
browser.sleep('5000');

settings.setWelcomemessage('Hey, Hey, Hey');
browser.sleep('5000');

จากนั้นจะไม่ทำงาน เนื่องจากการดำเนินการทั้งหมดเหล่านี้เป็นฟังก์ชัน asynchronius หมายความว่าพวกเขาไม่ได้ดำเนินการเชิงเส้น ภาษาโปรแกรมอื่นๆ มักจะรอให้ฟังก์ชันเสร็จสิ้นก่อนที่จะไปที่บรรทัดถัดไป แต่ในกรณีของการดำเนินการแบบอะซิงก์ใน js/nodejs จะไม่เป็นเช่นนั้น

โปรดลองรอแต่ละฟังก์ชันที่ดำเนินการอย่างเหมาะสม::

settings.clearWelcomemessage().then(() => {
    console.log('cleared welcome messgae! ')
    return browser.sleep('5000').then(() => {
        console.log('slept 5000')
        return settings.setWelcomemessage('Hey, Hey, Hey').then(() => {
            console.log('welcome message set!')
            return browser.sleep('5000').then(() => {
                console.log('second sleap done!')
            })
        })
    })
}).catch(err => console.error('error occured!', err))


คุณต้องปรับฟังก์ชั่นเองด้วย พวกเขาดำเนินการ async และคุณควรส่งคืนผลลัพธ์เสมอ เนื่องจากการดำเนินการเหล่านั้นส่งคืนอ็อบเจ็กต์ Promise เอกสาร

แก้ไข:

จริงๆ แล้ว เพิ่มพารามิเตอร์ไปที่ sendKeys() หากไม่มีกุญแจจะส่งไป..

this.clearWelcomemessage = function(){
        return txtWelcomemessage.clear();
    };

    this.clearWelcomemessage = function(){
        return txtWelcomemessage.clear();
    };

    // add message parameter. Or no message will be sent :) 
    this.setWelcomemessage = function(message){
        return txtWelcomemessage.sendKeys(message);
      };

หากวิธีนี้ช่วยแก้ปัญหาได้ คุณควรเรียนรู้เกี่ยวกับ promises resp async & await ฯลฯ

หากคุณทราบถึงการดำเนินการของ async และวิธีการทำงาน โปรดแก้ไขโค้ดของคุณในคำถามเนื่องจากไม่ใช่โค้ดต้นฉบับ

person Silvan Bregy    schedule 08.07.2021
comment
ฉันอัปเดตโค้ดแล้วและทำงานได้ดี แต่ปุ่มส่งยังคงไม่ทำอะไรเลย ที่แปลกคือสอบไม่ตก ฉันไม่พบข้อมูลว่าทำไมจึงคิดว่ากุญแจถูกส่งไปแล้ว ฉันกำลังอ่านเอกสารที่คุณให้มาด้วย ขอบคุณ - person Devy16; 08.07.2021
comment
ฉันเดาว่าคุณลืมส่งกุญแจจริงเหรอ? ยังไม่ได้สังเกตจนกระทั่งตอนนี้ ฉันอัพเดตคำตอบของฉันแล้ว - person Silvan Bregy; 09.07.2021
comment
คุณสามารถดูคำตอบนี้ได้ =› stackoverflow.com/questions/50970567/ - person Silvan Bregy; 09.07.2021
comment
อ๋อ.. ใช่ ฟังก์ชันในออบเจ็กต์หน้าว่างเปล่าตั้งแต่เริ่มต้น นั่นคือสิ่งที่ขาดหายไปและเหตุใดจึงไม่ทำงาน ขอขอบคุณสำหรับความช่วยเหลือของคุณ. - person Devy16; 09.07.2021