Java if(!string.equals.string)似乎一直在运行,而不仅仅是在它没有';不相等

Java if(!string.equals.string)似乎一直在运行,而不仅仅是在它没有';不相等,java,selenium,selenium-chromedriver,Java,Selenium,Selenium Chromedriver,当运行我的代码时,我遇到了!在一个陈述之前要有否定或相反的陈述。在本例中,if---此字符串不等于此字符串 我尝试过更改字符串中的第二个值,它每次都会更正它,但我观察了我的测试,这些值都是正确的,它仍然在运行。我一直想知道为什么,因为我需要在继续之前检查一下,Selenium 5-10%的时间输入字段太快了。这就是我实施此检查的原因 driver.findElement(By.id("inputcardNumberField")).sendKeys("41111111111111111"); W

当运行我的代码时,我遇到了!在一个陈述之前要有否定或相反的陈述。在本例中,if---此字符串不等于此字符串

我尝试过更改字符串中的第二个值,它每次都会更正它,但我观察了我的测试,这些值都是正确的,它仍然在运行。我一直想知道为什么,因为我需要在继续之前检查一下,Selenium 5-10%的时间输入字段太快了。这就是我实施此检查的原因

driver.findElement(By.id("inputcardNumberField")).sendKeys("41111111111111111");
WebElement visa = driver.findElement(By.id("inputcardNumberField"));

String visa2 = visa.getText();
    Thread.sleep(2000);

if (!visa2.equals("4111111111111111")) {                     
   driver.findElement(By.id("inputcardNumberField")).clear();    
   driver.findElement(By.id("inputcardNumberField")).sendKeys("4111111111111111"); 

   }
如果Selenium填充InputCardNumber字段太快,并且整个卡不存在。。它应该清除并重新进入


如果有正确的卡,则不必重新输入。它现在每次都会重新输入它

看起来我缺少get属性值——应该是这样的:

driver.findElement(By.id("inputcardNumberField")).sendKeys("4111111111111111");
WebElement visa = driver.findElement(By.id("inputcardNumberField"));

driver.manage().timeouts().implicitlyWait(2, TimeUnit.SECONDS);

String value = driver.findElement(By.id("inputcardNumberField")).getAttribute("value");         
    Thread.sleep(2000);

if (!visa2.equals("4111111111111111")) {
    driver.findElement(By.id("inputcardNumberField")).clear();           
    driver.findElement(By.id("inputcardNumberField")).sendKeys("4111111111111111"); 
    }

希望这个答案能帮助您理解为什么(!visa2.equals(“4111111111”)在您的情况下总是正确的

当您在“inputcardNumberField”中输入值时,它是在字段中输入的,但如果您在输入值后观察页面的HTML文档,则“inputcardNumberField”webelement将不会有任何文本

因此
String visa2=visa.getText()
语句将只存储
“”
(空白字符串)


这就是为什么
如果(!visa2.equals(“4111111111”)
总是在运行您的案例。

您刚才在字段中调用了
sendKeys()
。为什么需要检查您发送的密钥是否在现场?这听起来像是您在测试selenium的行为是否与它所宣传的一样。您是否尝试调试代码,例如检查
visa2
的实际值?然后你自己就会明白为什么它会这样做。visa.getText()将返回介于两者之间的任何内容,而不是文本字段本身的值。要获取当前值,您需要执行javascript。如果硒对这个字段的打字速度太快,您可能会考虑将字符串拆分为字符,并在一些睡眠中循环。我这样做是为了更准确地模拟用户键入:@andreas I。。它没有打印出任何东西。。因此,我没有得出一个价值——这是有道理的。