Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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 by.buttonText(';';)不会将空文本按钮作为量角器定位器返回_Javascript_Testing_Datepicker_Automation_Protractor - Fatal编程技术网

Javascript by.buttonText(';';)不会将空文本按钮作为量角器定位器返回

Javascript by.buttonText(';';)不会将空文本按钮作为量角器定位器返回,javascript,testing,datepicker,automation,protractor,Javascript,Testing,Datepicker,Automation,Protractor,我必须测试一个应用程序,它有一些按钮没有文本,只有图形(例如,日期选择器上的按钮不在我的控制范围内) 如果我试图通过以下方式找到这些: elm = element.all(by.buttonText('')); backButton = elm.get(1); 我没有立即得到错误,但如果我说backButton.click()我得到: Error: Index out of bound. Trying to access element at index: 1, but there are o

我必须测试一个应用程序,它有一些按钮没有文本,只有图形(例如,日期选择器上的按钮不在我的控制范围内)

如果我试图通过以下方式找到这些:

elm = element.all(by.buttonText(''));
backButton = elm.get(1);
我没有立即得到错误,但如果我说
backButton.click()
我得到:

Error: Index out of bound. Trying to access element at index: 1, but there are only 0 elements that match locator by.buttonText("").
另一方面,如果我说

element.all(by.tagName("BUTTON")).filter(function (elem) {
    return elem.getText().then(function (text) {

        //find the empties
        return !(text);
        //
    });
}).then(function (EmptyButtons) {

    EmptyButtons[1].click()
我发现了一个有趣的错误,提示我发现了一个我点击过的没有弹出的错误:

JavascriptError:元素当前不可见,可能无法操作(状态:11)

但这要由我来决定。如果我跟踪通过过滤器的文本,我会发现数组中有多个无文本按钮

很抱歉,我还没有生成和测试一个小示例的技能,但我希望一些有帮助的读者能够。 无论如何,我想我可能遗漏了承诺解析的一些微妙之处,或者期望的行为是,通过查找空文本,您无法找到无文本按钮。我也有一个解决方法(实际上有多个——请参阅下面我的评论)。不过,如果有人能够澄清的话,我希望在这里作出澄清。 最好的, 杰里米·卡汉
p、 我不认为这是“如何在量角器中单击没有文本的按钮”的重复,因为这需要区分无文本按钮,我的问题不是如何查找和区分它们,而是为什么搜索文本“”时找不到它们。[我的代码甚至建议如何实现或仍然可以实现,我认为。]

据我所知,您有很好的解决方法和方法,不必使用
by.buttonext
,只需要解释为什么
by.buttonext(“”)
不起作用

如果我们深入研究,首先会发现只有以下“按钮”变体:

button, input[type="button"], input[type="submit"]
这意味着,如果要查找的元素不是
按钮
或相应的
输入
元素,则定位器将无法匹配该元素

而且,根据变通方法判断,您案例中所需的元素实际上是
span
元素

除此之外,通过空的“按钮文本”进行匹配应该是可行的



在测试中的内部应用程序中使用的日期选择器上进行了测试-为我工作。下面是“所以在某种更深层的意义上,我认为在这个特殊情况下,正确的解决方法是:backButton=element(by.css(“span.glyphicon.glyphicon-chevron-left”);forwardButton=element(by.css(“span.glyphicon.glyphicon-chevron-right”));更好的解决方案是不测试第三方软件。您不必单击日期选择器上的按钮,只需在输入字段中输入日期值。该字段是您要测试的应用程序的一部分:日期选择器小部件是您不测试的工具包的一部分(而且您的老板不会付钱让您测试).Paul,这就是我在iOS for iPAD上进行测试之前所做的,在iOS for iPAD上,日期控件不允许我使用SendKeys,因为键盘不支持日期字段。哎哟。我本不认为键盘对这一点很重要,但现在你来了。直接设置表单字段的值怎么样?或者调用javascript中的日期控件trol用于设置日期?目的是避免受制于UI,并坚持测试应用程序。感谢@alecxe和Paul。我现在相信by.buttonText(“”)会起作用。在看到my glyphicon想法失败后(我认为这不是一个跨度,几乎可以肯定是一个按钮),我发现实际发生的情况是,当单击其他任何内容时,元素会消失,并且在一段时间内不会重新出现。我发现了这一点,因为我通过标记名“th”简化并获得了<(th[0])和>(th[2]),它们出现在过滤器中,并在我单击年份和日期(th[1])之后消失(0个元素匹配“th”)。我现在接受Paul的第一个建议,继续前进。
<button type="button" class="btn btn-default btn-sm pull-left" ng-click="move(-1)" tabindex="-1" ap-tab-nav-idx="1.2" ap-tab-nav-child="true">
    <i class="glyphicon glyphicon-chevron-left"></i>
</button>
> var element = $("button[ng-click='move(-1)']")[0]
> elementText = element.textContent || element.innerText || '';
> elementText.trim() === ""
true