Java Selenium 文本框文本不粘

Java Selenium textbox text not sticking

我已经发帖了,但我的问题并没有真正得到答案。我正在 java 中使用 Selenium 进行个人项目以创建帐户。我目前在使用发送密钥时遇到问题,所以我正在做一个 JavascriptExecutor。但出于某种原因,JavascriptExecutor 无法让文本保留在文本框中。有一个非活动文本框,我单击它然后将文本发送到活动文本框,但它立即消失。这是 HTML.

 <input name="dob-plain" class="step__input" type="text" placeholder="Date of Birth (mm / dd / yyyy)" autocomplete="off"> <input name="dob-format" type="hidden" value="MDY"> <span class="step__field__indicator"></span> </div>
<div class="step__field--date step__form__block" id="dob-field-active"> 
<input name="dob-month" class="step__input--date--mm" type="number" placeholder="mm" min="1" max="12" data-maxlength="2" value="" autocomplete="bday-month"> 
<span class="step__input--date-separator">/</span> 
<input name="dob-day" class="step__input--date--dd" type="number" placeholder="dd" min="1" max="31" data-maxlength="2" value="" autocomplete="bday-day"> 
<span class="step__input--date-separator">/</span> 
<input name="dob-year" class="step__input--date--yyyy" type="number" placeholder="yyyy" min="1900" max="2021" data-maxlength="4" value="" autocomplete="bday-year"> 
<span class="step__field__indicator"></span> </div>

这是我的代码。

//Initiating your chromedriver
WebDriver driver = new ChromeDriver();
Actions action = new Actions(driver);
//Applied wait time
driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
//maximize window
driver.manage().window().maximize();

//open browser with desried URL
driver.get("https://account.battle.net/creation/flow/creation-full");

Select se = new Select(driver.findElement(By.id("capture-country"))); 

se.selectByVisibleText("Russian Federation");
JavascriptExecutor jsExecutor = (JavascriptExecutor) driver; 


//find the element in selenium webdriver
driver.findElement(By.xpath("//input[@name='dob-plain']")).click();

WebElement monthElm = driver.findElement(By.xpath("//input[@name='dob-month']"));
jsExecutor.executeScript("arguments[0].value ='01'", monthElm);
                
WebElement dateElm = driver.findElement(By.xpath("//input[@name='dob-day']"));
jsExecutor.executeScript("arguments[0].value ='01'", dateElm);
        
WebElement yearElm = driver.findElement(By.xpath("//input[@name='dob-year']"));
jsExecutor.executeScript("arguments[0].value ='2021'", yearElm); ```    

而不是 JavascriptExecutor,我建议您使用 selectByValue,原因是您不能使用 selectByVisibleText,因为 Russian Federation 实际上对 selenium 不可见。

下面的代码应该可以工作:

Select se = new Select(driver.findElement(By.id("capture-country"))); 
se.selectByValue("RUS");

一般来说,除非没有其他办法,否则我们不应该使用 JavaScript clicks 而不是 WebDriver click,因为在大多数情况下 WebDriver click 模仿用户操作,所以如果你不能用 WebDriver 做一些事情,用户就不会也可以通过 GUI 执行此操作。
此外,您使用 Select 的方式不正确。
试试这个:

Select se = new Select(driver.findElement(By.id("capture-country"))); 
se.selectByValue("RUS");

可以在 here 和许多其他地方找到有关使用 Select 的更多详细信息。
另外,我会在执行此命令之前添加一个等待时间,这样整个代码就会像这样

WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("capture-country")));
Select se = new Select(driver.findElement(By.id("capture-country"))); 
se.selectByValue("RUS");