วิธีรับค่าข้อความจากองค์ประกอบอินพุตในไม้โปรแทรกเตอร์แทนคำสัญญา

เมื่อฉันค้นหาใน StackOverflow ฉันมีวิธีแก้ปัญหาหลายอย่างเพื่อรับค่าจากองค์ประกอบอินพุต

ฉันลองวิธีการด้านล่าง

วิธีที่ 1:

 return serialNumberTextField.getAttribute('ng-model')
                .then((text)=>{return serialNumberTextField.evaluate(text);})
                .then((evalText) =>{ console.log("serial number in eval method :"+evalText);
                        return evalText;})

วิธีที่ 2:

            return serialNumberTextField.getAttribute('value')
            .then( (text) =>{
                   console.log("serial number in method :"+text);
                     return text;})

เมื่อพิมพ์ด้วยสองวิธี มันจะพิมพ์ค่าที่แน่นอน เช่น:- วิธีที่ 1: หมายเลขซีเรียลในวิธี eval :assetDF1534 method2: หมายเลขซีเรียลในวิธี :assetDF1534

ฉันใช้ค่าตอบแทนในสองแห่ง

อันดับแรก: ตัวแปร 'assetName' ถูกจับได้จากวิธีการด้านบนเพื่อรับหมายเลขซีเรียล

assetNameTextField.clear().sendKeys(assetName);

ที่สอง:

element(by.xpath("//a[contains(text(),'"+ assetName+"')]")).click();

อันดับแรก มันทำงานได้ดีและป้อนค่า 'assetDF1534' ในช่องข้อความชื่อสินทรัพย์ แต่เมื่อพูดถึงการสร้างองค์ประกอบเว็บโดยใช้ชื่อสินทรัพย์ล้มเหลว เนื่องจากให้ 'assetName' เป็นสัญญาแทนมูลค่า เมื่อฉันพิมพ์ 'assetName' ในวิธีการเหล่านั้นซึ่งแสดงตามสัญญาด้านล่าง:

ชื่อสินทรัพย์ที่จะป้อนในตัวกรองคือ :ManagedPromise::2239 {[[PromiseStatus]]: "fulfilled"} ชื่อสินทรัพย์คือ :ManagedPromise::2239 {[[PromiseStatus]]: "fulfilled"}

Sendkeys จัดการสัญญาเนื่องจากเป็นวิธีการไม้โปรแทรกเตอร์ แต่ไม่ใช่ในกรณีอื่น จะได้รับคุณค่าแทนคำสัญญาได้อย่างไร?


person Sarada Akurathi    schedule 10.12.2019    source แหล่งที่มา


คำตอบ (2)


คุณต้องแก้ไขสัญญาแทนที่จะส่งคืน สิ่งนี้ควรจะได้ผล

function getSerialNumber() {
  return new Promise((resolve, reject) => {
    serialNumberTextField.getAttribute('value').then((text) => {
        resolve(text);
      })
      .catch((err) => {
        reject(err);
      });
  });
}
person tehbeardedone    schedule 10.12.2019
comment
สวัสดี ขอขอบคุณที่สละเวลาและคำตอบ เมื่อฉันลองวิธีแก้ปัญหาข้างต้น ฉันได้รับข้อผิดพลาดในการรวบรวมหลังจาก (resolve, reject) และสิ้นสุด braces - person Sarada Akurathi; 11.12.2019
comment
@SaradaAkurathi ขออภัยเกี่ยวกับเรื่องนั้น ฉันลืมส่วน => ฉันแก้ไขข้อมูลโค้ดด้านบนแล้ว ควรจะทำงานในครั้งนี้ - person tehbeardedone; 12.12.2019

พบวิธีแก้ไขดังนี้:

นิยามฟังก์ชัน

this.getSerialNumber = function()
    {
       return serialNumberTextField.getAttribute('value')
                .then( (text) =>{ return text; })

    };

การเรียกใช้ฟังก์ชัน

this.editAsset = async function(data)
    {
        this.getSerialNumber()
            .then( (serialNumber) =>{
                data.serialNumber = serialNumber;
            });
    }

ค่าที่ส่งคืนจาก getSerialNumber() ถูกกำหนดให้กับค่าโดยใช้ .then() เราสามารถแก้ไขสัญญาได้โดยใช้ .then()

person Sarada Akurathi    schedule 11.12.2019