[英]Cannot input text with selenium into field with angular 2 directive
我和Selenium合作了大約4年。 這是第一次發生在我身上,我找不到將文本發送到輸入字段的正確方法。 我們的應用程序使用角度2,我相信它與它有關。 我們需要使用angular 2指令的字段來檢查它是否是一個數字,然后將其格式化(只是添加逗號)。 當我使用常規的selenium sendKeys()方法時,文本不會出現在輸入字段中,沒有異常。 我試過使用Jquery:
$("#test_borrowValue").val(770)
來自selenium和谷歌Chrome控制台。 文本出現在輸入內部,但有角度看不到它,因為它是必填字段,所以無法進行測試。
我用selenium和js嘗試了各種各樣的事情:
action.keyDown(Keys.CONTROL).sendKeys("770").keyUp(Keys.CONTROL).perform();
$("#test_borrowValue").val(45).trigger("keydown", {which: 103});
唯一可行的是java Robot框架或Windows api。 但當然它不能可靠地工作。 由於在測試期間沒有其他任何東西可以打開,窗戶必須在頂部。 任何人在錯誤的時刻點擊屏幕上的任何地方都可能會破壞測試。 在詹金斯,它總是失敗。
這是html輸入的樣子:
`<input id="test_borrowValue" inputNumber class="form-control require-input" formControlName="borrowValue"
[ngClass]="{requireInputError : !form.controls.borrowValue.valid && form.controls.borrowValue.touched}"/>`
這里有角度2指令:
import { Directive, ElementRef, HostListener ,OnInit} from '@angular/core';
@Directive({
selector: '[inputNumber]'
})
export class InputNumberDtv implements OnInit {
private el:HTMLElement;
constructor(el:ElementRef) {
this.el = el.nativeElement;
}
ngOnInit():any {
this.onBlur();
}
@HostListener('keydown', ['$event']) onKeyDown(event:KeyboardEvent) {
var isNumberRegex = /^\d$/;
if (!isNumberRegex.test(event.key) && !this.permittedKeyCodes(event)) {
event.preventDefault();
}
}
@HostListener('focus') onFocus() {
$(this.el).val($(this.el).val().replace(/,/g, ""));
}
@HostListener('blur') onBlur() {
$(this.el).val($(this.el).val().replace(/\B(?=(\d{3})+(?!\d))/g, ","));
}
private permittedKeyCodes(event:KeyboardEvent) {
return event.keyCode === 46 /* Delete */
|| event.keyCode === 8 /* Backspace */
|| event.keyCode === 37 /* Arrow Left */
|| event.keyCode === 38 /* Arrow Up */
|| event.keyCode === 39 /* Arrow Right */
|| event.keyCode === 40 /* Arrow Down */
|| event.keyCode === 9 /* Tab */
|| event.keyCode === 18; /* Alt */
}
}
如果我評論@HostListener塊,sendKeys()方法開始按預期工作。 但當然我們需要驗證和格式化。
尋找來自selenium,js(測試方)和角度2(開發方)解決方案的建議。
問題可能出在這段代碼中:
var isNumberRegex = /^\d$/;
if (!isNumberRegex.test(event.key)...
檢查event.key
是否具有適當的值。
經過一些研究后,似乎因為selenium web驅動程序不再使用本機事件,event.key屬性將為空。
所以唯一的解決方案是接收事件的關鍵屬性,如下所示:
String.fromCharCode(event.keyCode);
這就是開發人員必須這樣做的方式。 它與Angular 2無關。查看此鏈接:
https://github.com/seleniumhq/selenium/issues/386
注意:它不僅適用於Firefox瀏覽器。
如果它是角度應用,那么使用量角器代替硒框架是好的,因為量角器是好的,如果角度應用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.