我正在努力解决以下问题,即硒总是在第一个日期字段中输入日期,即使当前列表项是第二个。
如果您查看上面的数据,我们现在有 2 个日期字段,我可以毫无问题地输入可用日期,但是当我尝试输入最早雇用日期时,它会在第一个字段中输入日期。这两个都具有相同的属性,除了我们无法选择的动态类名之外没有区别。 尝试过的选项 -
1。尝试点击第二个日期选择器,它确实点击了,但是当它 如果在第一个输入日期,则会输入日期。 2.尝试使用Action,同时执行click和sendkey。与上面相同的问题。 3. 尝试单击 Enter 并单击列表项 2,它确实有效,但在以下情况下再次相同 我们输入日期,它会更新第一个中的日期。***
WebElement datePicker =positionInfoData.get(j).findElement(By.xpath("//input[@data-automation-id='dateSectionMonth-input']"));
WebElement dateField = positionInfoData.get(j).findElement(By.xpath("//*[@data-automation-id='dateTimeWidget']"));
Actions action = new Actions(DriverUtils.driver);
datePicker.sendKeys(Keys.ENTER);
action.moveToElement(datePicker).click().moveToElement(datePicker,200, 0).sendKeys(actionValue).build().perform();
第一个元素的 HTML -
<input type="number" inputmode="numeric" min="1" max="12" placeholder="MM" width="2ch" tabindex="0" id="0fb600c0-f878-4c72-8e00-8454439656d3-dateSectionMonth-input" data-automation-id="dateSectionMonth-input" aria-describedby="helpText-0fb600c0-f878-4c72-8e00-8454439656d3 validationMessageContainer-56$9736--uid13" aria-label="Month" class="css-1wetivj-StyledNumericInput e1y2y4vi3" value="" aria-required="true" aria-invalid="true">
第二个HTML
<input type="number" inputmode="numeric" min="1" max="12" placeholder="MM" width="2ch" tabindex="0" id="da687207-232b-4bf2-8e6b-e2f44ef25c40-dateSectionMonth-input" data-automation-id="dateSectionMonth-input" aria-describedby="helpText-da687207-232b-4bf2-8e6b-e2f44ef25c40" aria-label="Month" class="css-1v1ubmp-StyledNumericInput e1y2y4vi3" value="10" aria-required="true">
最后我找到了一些解决方法来让它工作,但我觉得它不正确,所以我很想得到更多反馈。分享我的解决方案,以便其他人可以从中受益。
我之前的方法是围绕列表,我专注于在列表中查找元素,然后单击输入日期,但使用这种方法,它总是在第一个元素中输入日期。在下面的方法而不是列表中,我使用了日期元素的文本搜索,然后使用操作将点击和日期一起发送。
WebElement dateFields = driver.findElement(By.xpath("//*[contains(text(), 'Available Date')]"));
Actions action = new Actions(DriverUtils.driver);
action.moveToElement(dateFields).click().moveToElement(dateFields,200, 0).sendKeys(actionValue).build().perform();