簡體   English   中英

無法使用角度2指令將帶有selenium的文本輸入到字段中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM