2016-05-13 29 views
6

Tôi đang sử dụng Java, Selenium và Chrome để tự động kiểm tra. Các nhà phát triển của chúng tôi gần đây đã nâng cấp giao diện người dùng của chúng tôi từ AngularJS lên Angular2 (không chắc chắn liệu vấn đề đó có quan trọng) hay không. Nhưng kể từ đó, sendKeys nhập các ký tự không đầy đủ vào trường văn bản. Dưới đây là ví dụ:Selenium sendKeys không gửi tất cả các ký tự

public void enterCustomerDetails() 
    { 
     txtFirstName.sendKeys("Joh201605130947AM"); 
     txtSurname.sendKeys("Doe201605130947AM"); 
     txtEmail.sendKeys("[email protected]"); 
    } 

Tôi cũng đã thử sử dụng executeScript. Nó không hoạt động. Nó có thể nhập các ký tự hoàn chỉnh nhưng biểu mẫu cho rằng trường là null.

public void forceSendKeys(WebElement element, String text) 
{ 
    if (element != null) 
     ((JavascriptExecutor) this.webDriver).executeScript("arguments[0].value=arguments[1]", element, text); 
} 

public void enterCustomerDetails() 
     { 
      forceSendKeys(txtFirstName, "Joh201605130947AM"); 
      forceSendKeys(txtSurname, "Doe201605130947AM"); 
      forceSendKeys(txtEmail, "[email protected]"); 
     } 

Tôi cũng đã thử sử dụng .click() trước .sendKeys và thêm thời gian ngủ. Họ cũng không làm việc.

Tôi có một ý tưởng để nhập các ký tự 1 bằng 1 từ bài đăng này: How to enter characters one by one in to a text field in selenium webdriver?

Nó làm việc nhưng điều đó có nghĩa là tôi phải viết lại tất cả các mã của tôi từ SendKeys để các chức năng mới:

public void sendChar(WebElement element, String value) 
{ 
    element.clear(); 

    for (int i = 0; i < value.length(); i++){ 
     char c = value.charAt(i); 
     String s = new StringBuilder().append(c).toString(); 
     element.sendKeys(s); 
    }  
} 

public void enterCustomerDetails() 
    { 
     sendChar(txtFirstName, "Joh201605130947AM"); 
     sendChar(txtSurname, "Doe201605130947AM");  
     sendChar(txtEmail, "[email protected]"); 
    } 

Nếu các bạn biết một cách tốt hơn, hãy giúp đỡ! :)

+0

tốt. trông giống như vấn đề với Angular2 mà thôi. –

Trả lời

2

Tôi giả định này là do vấn đề này Angular2 https://github.com/angular/angular/issues/5808

góc không thể xử lý các sự kiện đầu vào khi họ đến quá nhanh.

Để giải quyết sự cố, bạn cần phải gửi các ký tự đơn với độ trễ nhỏ giữa mỗi ký tự.

0

thử mã này .. cách khác để đặt giá trị bằng cách sử dụng javascript Trình điều khiển WebDriver = new FirefoxDriver(); Trình điều khiển JavascriptExecutor jse = (JavascriptExecutor); jse.executeScript ("document.getElementsByName ('body') [0] .setAttribute ('type', 'text');"); driver.findElement (By.xpath ("// input [@ name = 'body']")). Clear(); driver.findElement (By.xpath ("// input [@ name = 'body']")). SendKeys ("Ripon: body text");

1

Tôi tình cờ gặp lỗi này khi thực hiện kiểm tra tích hợp với NightwatchJS (sử dụng selen).

Vì vậy, tôi đang viết điều này cho những người đến đây trong tương lai.

tôi đã viết lệnh này mở rộng cho Nightwatch:

exports.command = function (selector, value, using) { 
    var self = this; 
    self.elements(using || 'css selector', selector, function (elems) { 
     elems.value.forEach(function (element) { 
      for (var c of value.split('')) { 
       self.elementIdValue(element.ELEMENT, c); 
      } 
     }); 
    }); 
    return this; 
}; 

Mà có thể được sử dụng theo cách này:

var username = '[email protected]'; 
browser.setValueSlow('input[ngcontrol=username]', username); //Works with ng2! 

Vấn đề này cũng đã được thảo luận trên github NightwatchJS của here

Các vấn đề liên quan