【问题标题】:Protractor - Compare two elements having same locator量角器 - 比较具有相同定位器的两个元素
【发布时间】:2016-08-27 03:29:47
【问题描述】:

我的应用程序在记录行上使用无限滚动,这意味着任何特定记录的定位器,比如最后一条记录,总是相同的,但每次滚动时,下面的记录都会不同。

我希望将滚动前的最后一个元素对应的元素与滚动后的最后一个元素对应的相同元素进行比较

量角器有一个“等于”函数,但我想它是根据定位器进行比较的,这就是为什么当我比较具有相同定位器但记录不同的最后一个元素时,它总是结果为真。

有没有其他方法可以直接比较两个元素?

【问题讨论】:

    标签: protractor


    【解决方案1】:

    它非常简单。在执行滚动之前,将文本存储在某个变量中。再次执行滚动后,使用相同的定位器获取最新记录的文本。请看下面的示例代码。

    var textOfLastRecordBeforescrolling = element.all(by.css("someLocator")).last().getText();
    //Perform Scrolling
    var textOfLastRecordAfterscrolling = element.all(by.css("someLocator")).last().getText();
    expect(textOfLastRecordBeforescrolling).toEqual(textOfLastRecordAfterscrolling) //do whatever comparison you want do
    

    【讨论】:

      【解决方案2】:

      您可能需要保存第一个元素的信息,然后滚动,从第二个元素获取信息,然后进行比较。

        it('Has different elements after infinite scrolling', function(){
          var elementOfInterest = $$('.infiniteScrollElement').last();
      
          // Get the text of the first element and pass it down
          elementOfInterest.getText().then(function(firstElementsText){
            // Scroll however far you need to
            browser.executeScript('window.scrollTo(0,500);').then(function(){
              // Compare the current elements text with the past elements text
              expect(elementOfInterest.getText()).not.toEqual(firstElementsText, 'Error: The text should be different between the two elements, but was not');
            })
          })
        });

      【讨论】:

      • 是不是可以直接比较元素对象而不是读取文本?
      • @Manya 你想用它做什么?量角器 web 元素只包含一些静态的东西,比如它的选择器和可以执行的函数列表,但这些都解析为在调用时完成的承诺。其函数的结果通常是有用的,而不是对象本身。
      【解决方案3】:

      要比较一个网络元素的实例,可以测试element(...).getId()返回的值。

      返回的id是页面中每次遇到HTMLElement对象生成的引用,与id属性/属性无关。

      这是一个滚动内容并等待最后一个元素被替换的示例:

      browser.get("https://twitter.com/BBC/");
      
      // define the locator for the last element
      var lastElement = $$('#stream-items-id > li').last();
      
      // store the reference for the last element
      var storedRef = lastElement.getId();
      
      // scroll to the last element
      browser.actions().mouseMove(lastElement).perform();
      
      // wait for the last element to be another reference
      browser.wait(function(){
        return storedRef.then(function(a){
            return lastElement.getId().then(b => a !== b);
        }, 3000);
      });
      
      // compare the stored reference with the last element
      expect(lastElement.getId()).not.toEqual(storedRef);
      

      【讨论】:

      • 这个解决方案看起来不错。唯一的缺点是我无法使用 === 运算符比较“ID”。我必须为此使用 localeCompare
      • @Manya,执行是异步的,所以不可能直接用相等运算符比较两个元素。它必须通过承诺的解决。
      猜你喜欢
      • 2016-12-11
      • 1970-01-01
      • 1970-01-01
      • 2020-05-03
      • 2016-01-14
      • 2020-08-13
      • 2018-04-04
      • 2016-06-22
      • 1970-01-01
      相关资源
      最近更新 更多