Java 如何在不改变实际卡号的情况下,在selenium中将信用卡号屏蔽为sendkeys?

Java 如何在不改变实际卡号的情况下,在selenium中将信用卡号屏蔽为sendkeys?,java,selenium,selenium-webdriver,credit-card,masking,Java,Selenium,Selenium Webdriver,Credit Card,Masking,我试图阻止在播放selenium webdriver测试时在屏幕上显示信用卡号。我正在从中央数据库中提取信用卡号码,但在测试中找不到。为了安全起见,我想在selenium尝试sendKeys信用卡号输入字段中的号码时屏蔽卡号。我尝试了不同的选项,但它们往往会改变卡片的实际值,从而在页面中抛出卡号错误。关于如何在不影响selenium的实际价值的情况下屏蔽实际卡,有什么想法吗 以下是我所做的: String creditCardNumber = "1234567891234567"; driver

我试图阻止在播放selenium webdriver测试时在屏幕上显示信用卡号。我正在从中央数据库中提取信用卡号码,但在测试中找不到。为了安全起见,我想在selenium尝试
sendKeys
信用卡号输入字段中的号码时屏蔽卡号。我尝试了不同的选项,但它们往往会改变卡片的实际值,从而在页面中抛出卡号错误。关于如何在不影响selenium的实际价值的情况下屏蔽实际卡,有什么想法吗

以下是我所做的:

String creditCardNumber = "1234567891234567";
driver.findElement(By.id("label")).sendKeys(
    maskCardNumber(creditCardNumber, "xxxxxxxxxxxxxxx"));

公共静态字符串maskCardNumber(字符串cardNumber,字符串MaskCard){
//设置数字格式
int指数=0;
StringBuilder maskedCardNumber=新StringBuilder();
对于(int i=0;i
  • 最好的解决办法是使用测试号码或一次性卡片
  • 如果您可以访问网页DOM,只需将输入类型表单“text”更改为“password”

最安全的方法是只使用测试卡号-这样即使有人在测试中插入键盘记录器,也不会暴露卡号。典型的测试卡号(VISA)是
444433332221111
。任何银行都不会授权使用该号码的交易。不要在测试中使用真实的卡号。最好的事情是你不想使用真实的卡号。如果这是不可能的,那么您只需从数据库中读取卡号并将其存储到一个变量中并传递该变量,这至少会使未接触您的代码的人无法通过您的监视器看到卡号:)感谢@OldCurmudgeon和Vignesh的及时响应。这实际上是用于生产验证测试,我有用于qa环境的假卡。我不希望每次都执行手动产品验证,而是希望由自动化测试来完成。这有意义吗?
public static String maskCardNumber(String cardNumber, String maskedCard) {
    // format the number
    int index = 0;
    StringBuilder maskedCardNumber = new StringBuilder();
    for (int i = 0; i < maskedCard.length(); i++) {
        char c = maskedCard.charAt(i);
        if (c == '#') {
            maskedCardNumber.append(cardNumber.charAt(index));
            index++;
        } else if (c == 'x') {
            maskedCardNumber.append(c);
            index++;
        } else {
            maskedCardNumber.append(c);
        }
    }

    // return the masked number
    return maskedCardNumber.toString();
}