如何在依赖值达到某个值之前单击Button?

时间:2017-09-27 16:03:57

标签: javascript protractor

使用量角器我尝试自动化UI的一部分,其中使用正负按钮选择最小 - 最大范围(即100' 000-200' 000)。 / p>

有一个inputAmount(即250&#39; 000),用于定义要选择的范围。 现在我应该点击plus-button,直到我得到200&#39-30000&000;范围,由动态调整后的<div class="currentMax">100'000</div>标识。

我的问题是将当前所选范围的currentMax从字符串转换为数字,因此我可以将其与inputAmount进行比较。 HTML看起来像这样:

&#13;
&#13;
<html>
<div class="max">100'000</div>
<div class="slider-buttons">
  <div class="slider-button">
    <div class="slider-button-plus"></div>
  </div>
  <div class="slider-button">
    <div class="slider-button-minus"></div>
  </div>
</div>
</html>
&#13;
&#13;
&#13;

我的量角器代码看起来像这样:

this.selectAmountRange = function() {
    var currentMax = $('.max').getText();  //How do I get this value as number?
    var btnPlus = $('.slider-buttons .slider-button-plus');
    for (i = currentMax; i <= inputAmount; i = currentMax) {
        btnPlus.click();
        browser.wait(300);
    };
};

一个问题是,currentMax用&#34;&#39;&#34;千分隔,因此我无法直接转换它。 另一个问题是,getText()返回一个promise,但即使我找到了一些例子,到目前为止我还没有获取字符串,甚至删除了分隔符。

我尝试了这个,但没有用。

var currentMax = $('.max').getText().then(function(value){
    value.replace(/\'/,'');
    });

由于我对JavaScript和Protractor都很陌生,我认为它只是一些我做错的语法。 感谢任何建议和对可行功能的推动。

2 个答案:

答案 0 :(得分:0)

我没有权利发表评论所以我把它作为一个答案,你把所有代码都放在那里() - 在promise返回值之后?

currentMax是一个初始化的变量,一旦进入它就会结束循环!?

你提到过currentMax,在代码中有最大值是否相同?什么btnPlus点击增量,最大?

最后我建议类似于:

$('.max').getText().then(function(value){
    var currentMax = parseInt(value.replace(/\'/,''));
    var btnPlus = $('.slider-buttons .slider-button-plus');
    for (i = currentMax; i <= inputAmount; i++) {
        btnPlus.click();
        browser.wait(300);
    };
});

答案 1 :(得分:0)

由于javascript是异步的,因此您需要在从promise中访问返回值之前解析promise。在您的情况下,您需要实现递归以使您的方法单击滑块直到设置所需的值。看看下面的例子。

var selectAmountRange = function(inputAmount) {
     $('.max').getText().then(function(currentMax){
         var btnPlus = $('.slider-buttons .slider-button-plus');
          if(currentMax < selectAmountRange){
              btnPlus.click();
              browser.sleep(3000);
              selectAmountRange(inputAmount); //call the same method untill required inputAmount is selcted.
          }
     }; 
};