【问题标题】:How to send values using labels of a field in Protractor如何使用量角器中的字段标签发送值
【发布时间】:2021-01-21 01:34:24
【问题描述】:

谁能指导我如何使用字段标签发送值。我知道随着标签的变化,不应该使用标签发送值,但在我的情况下,情况并非如此,即它不会改变。 我附上了该标签的 HTML 代码截图和网页截图。 WebPage ScreenshotHTML Code Screenshot。 我唯一能展示的代码结构就是这张图片。Code Structure

我尝试过的代码如下, From Date 和 To Date 是我尝试过的一组代码。所以,就像第一个 From 和 To Date 变量是一种代码实现方式,第二组是其他一些代码实现方式,依此类推。

async selectDates(FromDate:string,ToDate:string){
   console.log("$$$ From and To Date in selectDates function From: "+FromDate+" To: "+ToDate);
   // var fromDate = "From Date";
   // await browser.element(by.xpath("//label[. = '" + fromDate + "']/following-sibling::input"));
   // await fromInput.sendKeys(FromDate);

    
    // var toDate = "To Date";
    // await browser.element(by.xpath("//label[. = '" + toDate + "']/following-sibling::input"));
    // await toInput.sendKeys(ToDate);

    // var TmpLabelName = "From Date";
    // var TmpInput = await element(by.xpath("//label[contains(text(),'" + TmpLabelName + "')]/following-sibling::input"));
    // await TmpInput.sendKeys(FromDate);

    // var TmpLabelName2 = "To Date";
    // var TmpInput2 = await element(by.xpath("//label[contains(text(),'" + TmpLabelName2 + "')]/following-sibling::input"));
    // await TmpInput2.sendKeys(ToDate);

    // var TmpLabelName = "From Date";
    // var TmpInput = await element(by.xpath("//label[.,'" + TmpLabelName + "']/following-sibling::input"));
    // await TmpInput.sendKeys(FromDate);

    // var TmpLabelName2 = "To Date";
    // var TmpInput2 = await element(by.xpath("//label[.,'" + TmpLabelName2 + "']/following-sibling::input"));
    // await TmpInput2.sendKeys(ToDate);

    // let FlabelName = "From Date";
    // var Finput = await element(by.xpath("//label[. = '" + FlabelName + "']/following-sibling::input")).sendKeys(FromDate);

    // let TlabelName = "To Date";
    // var Tinput = await element(by.xpath("//label[. = '" + TlabelName + "']/following-sibling::input")).sendKeys(ToDate);

    
} 

我搜索了很多文章和其他答案,但都没有给出想要的答案。谁能帮帮我,这真的很有帮助!

编辑: 代码结构(抱歉标识问题)

function ele(label: string){

return element.all(by.css('td > label.fieldlabel')).filter((ele)=>{

   return ele.getText().then((text: string) => {

      return text === label;

   });

}).get(0);

}

export class Reports extends ReportObjects {


                         async selectDates(FromDate:string,ToDate:string){

                                       await browser.executeScript("arguments[0].value='" + FromDate + "';", ele('From Date'));

                                       await browser.executeScript("arguments[0].value='" + ToDate + "';", ele('To Date'));

                        

                         }

          async generateReport(testDataRow:number){

                                       let fromDate = excel.getColumnValue('FromDate',testDataRow).toString();

                                       let toDate = excel.getColumnValue('ToDate',testDataRow).toString();

                                      

                                       await this.selectDates(fromDate,toDate);

                        

                         }


 }

Excel 截图From/To Date

PS:我不能使用 ID,因为它是动态的,它会根据不同的场景而变化

【问题讨论】:

    标签: node.js typescript npm protractor element


    【解决方案1】:

    使用 java 脚本执行器尝试以下解决方案

         const FromDate= //your from date
          function ele(label: string){ 
               return element.all(by.css('td > label.feildlabel').filter((ele)=>{
                  return ele.getText().then((text: string) => {
                     return text === label;
                  });
               }).get(0);
            }
            await browser.executeScript("arguments[0].value='" + FromDate + "';", ele('From Date'));
    

    参考https://www.protractortest.org/#/api?view=webdriver.WebDriver.prototype.executeScript

    【讨论】:

    • 您好,感谢您的回复。但是,这给了我以下错误 ------> NoSuchElementError: No element found using locator: By(css selector, [label="From Date"]>input)
    • 嗨,Madhan,现在,我没有收到任何无元素错误。但是 FromDate 的值没有被插入。尽管变量有值,但它似乎是空白的。
    • @ShahbazKhan 请以预期格式提供日期。要获得更多可见性,请使用您的代码更新问题
    • 嗨@Madhan 请现在检查并告诉我
    • @ShahbazKhan 将ele 功能移动到您的Reports
    【解决方案2】:

    即使我们不建议使用 XPATH,但在您的情况下我们需要它。

    cost ele = element(by.xpath('//label[text()="From Date"]/../../input'))
    await ele.sendKeys(FromDate)
    // if sendKeys() can't work, try as below
    await browser.executeScript("arguments[0].value=arguments[1]", ele, FromDate);
    
    

    【讨论】:

    • 感谢您的回复。我没有收到此类元素错误。我无法弄清楚是什么情况。
    猜你喜欢
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 2022-07-12
    相关资源
    最近更新 更多