2

As per my requirement I have to enter credit card number which is 4111 1111 1111 1111.

I am trying with sendKeys(), it is working in all browsers except IE browser.

When it is trying to enter the number in IE browser its only entering 1 or 2 digits. Not sure why it is happening with IE browser only.

Any ideas?

4
  • 4
    Call sendKeys for each digit.
    – Florent B.
    Commented Apr 25, 2018 at 9:44
  • As @FlorentB suggests, the IE interface is slow and in some ways buggy. Write a sendkeys wrapper that sends the keystrokes one-a-a-time if the browser is IE. Commented Apr 25, 2018 at 13:53
  • Obviously, the solution is drop support for IE. =)
    – corsiKa
    Commented Apr 26, 2018 at 1:32
  • @FlorentB. You should make an answer =)
    – corsiKa
    Commented Apr 26, 2018 at 1:33

1 Answer 1

3

Use JavaScriptExecutor instead of the SendKeys:

String cardNum= "4111111111111111";
WebElement inputField= driver.findElement(By.id("cardnum"));

JavascriptExecutor js= (JavascriptExecutor) driver;
js.executeScript("arguments[1].value = arguments[0]; ", cardNum, inputField); 
3
  • 4
    By writing the value directly, you are no longer simulating a user input. The element could be disabled, not interactable and it doesn't emit the events expected the page like keydown, keyup, input, change, focus). Thus this should never be used in test.
    – Florent B.
    Commented Apr 25, 2018 at 11:51
  • 2
    @FlorentB. I guess it depends on what you're testing. I think your point is well articulated, but I also think never is a strong word.
    – corsiKa
    Commented Apr 26, 2018 at 1:33
  • 1
    @corsiKa, a test is supposed to validate a behavior, not just work, especially with an e2e test. So in this case never is just the right word. That is if you want to write a useful test. Don't get me wrong, I'm not saying that injecting some JS in the page should never be done. I'm saying it should never be done as presented in this solution since it doesn't assert the interactibility nor emit any event.
    – Florent B.
    Commented Apr 26, 2018 at 12:43

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.