Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何单击按钮直到从属值达到某个值?_Javascript_Protractor - Fatal编程技术网

Javascript 如何单击按钮直到从属值达到某个值?

Javascript 如何单击按钮直到从属值达到某个值?,javascript,protractor,Javascript,Protractor,使用量角器,我试图自动化用户界面的一部分,其中使用加减按钮选择最小-最大范围(即100'000-200'000) 有一个inputAmount(即250'000),定义了要选择的范围。 现在,我应该单击plus按钮,直到得到一个范围200'000-300'000,由动态调整的100'000标识 我的问题是将当前所选范围的currentMax从字符串转换为一个数字,以便将其与inputAmount进行比较。 HTML如下所示: 100'000 我没有评论的权利,所以我把它作为一个答案,在承诺返

使用量角器,我试图自动化用户界面的一部分,其中使用加减按钮选择最小-最大范围(即100'000-200'000)

有一个
inputAmount
(即250'000),定义了要选择的范围。 现在,我应该单击
plus按钮
,直到得到一个范围200'000-300'000,由动态调整的
100'000
标识

我的问题是将当前所选范围的
currentMax
从字符串转换为一个数字,以便将其与
inputAmount
进行比较。 HTML如下所示:


100'000

我没有评论的权利,所以我把它作为一个答案,在承诺返回值后,您是否将所有代码都放在了then()中

currentMax是一个初始化一次的变量,循环一进入它就结束了吗

你提到了currentMax,代码中有max,它们是一样的吗?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);
    };
});
$('.max').getText().then(函数(值){
var currentMax=parseInt(value.replace(/\'/,'');
var btnPlus=$('.slider button.slider button plus');

对于(i=currentMax;i我没有评论的权利,所以我把它作为一个答案,在承诺返回值之后,您是否将所有代码都放在了then()中

currentMax是一个初始化一次的变量,循环一进入它就结束了吗

你提到了currentMax,代码中有max,它们是一样的吗?btnPlus点击增量是多少,max

最后,我想提出类似的建议:

$('.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);
    };
});
$('.max').getText().then(函数(值){
var currentMax=parseInt(value.replace(/\'/,'');
var btnPlus=$('.slider button.slider button plus');

对于(i=currentMax;i,由于javascript是异步的,所以在访问承诺返回值之前需要解析承诺。在您的情况下,需要实现递归,使您的方法单击滑块,直到设置了所需的值。请看下面的示例

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.
          }
     }; 
};
var selectAmountRange=函数(inputAmount){
$('.max').getText().then(函数(currentMax){
var btnPlus=$('.slider button.slider button plus');
如果(当前最大值<选择范围){
btnPlus.click();
浏览器。睡眠(3000);
SELECTAMONTRANGE(inputAmount);//调用相同的方法,直到选择了所有必需的inputAmount。
}
}; 
};

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

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.
          }
     }; 
};
var selectAmountRange=函数(inputAmount){
$('.max').getText().then(函数(currentMax){
var btnPlus=$('.slider button.slider button plus');
如果(当前最大值<选择范围){
btnPlus.click();
浏览器。睡眠(3000);
SELECTAMONTRANGE(inputAmount);//调用相同的方法,直到选择了所有必需的inputAmount。
}
}; 
};

你有没有查过如何在javascript中将字符串转换为数字?是的,我查过。但是,直到removig the'这一部分已经成了问题,我才来。我可以通过将传递的参数设置为显式字符串来解决这个问题(否则replace会被解释为'replace url',强制将参数设置为一个位置)。你有没有查过如何在javascript中将字符串转换为数字?是的,我查过。但是,直到removig the'这一部分出现问题之前,我才来。我可以通过将传递的参数设置为显式字符串来解决这个问题(否则replace会被解释为'replace url',强制将参数设置为一个位置)。这个答案对我帮助很大!递归确实解决了我的大部分问题。在你的例子中,我不得不删除“var”并在then部分的末尾添加“')。完成后,我成功地重复单击加号按钮。缺少的部分是“如何将我的getText()转换为数字?”。默认情况下,它似乎是
currentMax.replace(/\”/,“”)
正在强制我的currentMax成为一个位置而不是一个字符串(即
100'000
)。同样奇怪的是,我从执行中得到
null
,但当我执行
browser.enterepl()时
在then函数开始时,手动执行相同的步骤是有效的。有什么线索吗?将此标记为正确答案,因为它解决了我的主要问题(使用
递归
而不是
for
)。但是我仍然对getText转换感到不安,所以我很高兴能有更多的评论。你能使用下面的正则表达式吗?
currentMax=parseInt(currentMax.repleace(/[^0-9]/g',);
这是正确的提示。毕竟,我必须通过使用
getText(),将currentMax的函数输入强制为字符串。然后(函数(文本){var currentMax=parseInt(String(text).replace(/[^0-9]/g',);});
。现在它终于可以工作了!再次感谢您的良好输入!这个答案对我帮助很大!确实递归解决了我的大部分问题。在您的示例中,我必须删除“var”并放置一个“)'在then部分的末尾。完成后,我成功地重复单击加号按钮。缺少的部分是'如何将我的getText()转换为数字?'。默认情况下,似乎
currentMax.replace(/\'/,'')
强制我的currentMax成为一个位置而不是字符串(即
100'000
)。同样奇怪的是,我从执行中得到了
null
,但是当我执行
browser.enterepl()
时,在函数开始时,手动执行相同的步骤是有效的。有什么线索吗?将此标记为正确答案,因为它解决了我的主要问题(对于
,使用
递归
而不是
).但是我仍然在为getText转换而烦恼,所以我很高兴能有进一步的改进