【问题标题】:How to get the number of elements in protractor nodejs and how to click on particular element having the same xpath如何获取量角器nodejs中的元素数量以及如何单击具有相同xpath的特定元素
【发布时间】:2021-02-03 13:11:13
【问题描述】:

我的方案是在页面中添加一个部分并对其执行操作。但是由于已经存在具有相同 xpath 的元素,webdriver 正在单击第一个元素并且脚本失败。所以,我想获取现有具有相同 xpath 的元素数量,然后将计数增加 1,以便单击新添加的部分。请找到下面的代码并纠正我哪里出错了。(或)建议我任何其他方法。 另外,请让我知道行号。如果解决了获取元素数量的问题,则 9 有效。谢谢!

方法:

this.getElementCount=async function(locator) {
  try {
    console.info('Verifying count for element ' + locator);
    let noOfElements = await element.all(locator).count();
      await console.info('There are ' + noOfElements + 'elements in UI');
      return noOfElements;
  } catch(err) {
      throw err;
  }
}

调用方法:

var compLocator = element(by.xpath("//div[@title='Test']"));

this.clickOnComp=async function(){
        var elementsCount=getElementCount(compLocator);
        console.info("No. of elements : "+elementsCount);

        if(elementsCount>1){
            var currentEle=elementsCount+1;
            var currentCompLocator=compLocator[currentEle]; // line no.9
            console.info("comp locator :" +currentCompLocator);
            await clickElement(currentCompLocator);
            console.info("Clicked : "+currentCompLocator);
        }
        else{
        await clickElement(compLocator);
        }
        
    }

输出:

Verifying count for element [object Object]
No. of elements : [object Promise]
(node:13915) UnhandledPromiseRejectionWarning: TypeError: Invalid locator

【问题讨论】:

    标签: node.js selenium protractor


    【解决方案1】:

    从使用await解决承诺开始

    
    var compLocator = element(by.xpath("//div[@title='Test']"));
    
    this.clickOnComp=async function(){
            var elementsCount=await getElementCount(compLocator); // <-----------------
            console.info("No. of elements : "+elementsCount);
    
            if(elementsCount>1){
                var currentEle=elementsCount+1;
                var currentCompLocator=compLocator[currentEle]; // line no.9
                console.info("comp locator :" +currentCompLocator);
                await clickElement(currentCompLocator);
                console.info("Clicked : "+currentCompLocator);
            }
            else{
            await clickElement(compLocator);
            }
            
        }
    

    【讨论】:

      【解决方案2】:

      您的代码中有两个问题:

      1. getElementCount() 需要你给一个元素一个定位器参数
      2. (第 9 行)compLocator 是一个元素,不是 xpath 或元素数组,您不能使用 compLocator[currentEle]
      var compXPath = "//div[@title='Test']"
      var compLocator = by.xpath(compXPath);
      
      this.clickOnComp=async function(){
        var elementsCount = await getElementCount(compLocator); 
        console.info("No. of elements : "+elementsCount);
      
        if(elementsCount > 1){
          var currentEle = elementsCount+1;
          var currentCompXPath = compXPath + "/["+ currentEle +"]" // line no.9
          console.info("current Comp xpath :" +currentCompXPath);
      
          var currentCompLocator = by.xpath(currentCompXPath)
          await clickElement(currentCompLocator);
          console.info("Clicked : "+currentCompLocator);
        }
        else{
          await clickElement(compLocator);
        } 
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-16
        • 2017-01-20
        • 2018-11-15
        • 2017-03-22
        • 2016-05-02
        相关资源
        最近更新 更多