问题描述
我看到有几个与此类似的问题,但对我来说都是可行的。 我正在使用一些Java机器人,现在我在一个地方堆叠:/试图用动态xpath拾取并单击日历日期
//*[@id="root"]/div/div[1]/div[2]/div[1]/div/div/div/div[3]/div/span/div/div/div/div/div/div[2]/div[2]/div[3]/div[3]/div[1]
元素就是这样
<div class="DayPicker-Day DayPicker-Day--isdisabled" tabindex="-1" role="gridcell" aria-label="Mo. 9. Nov 2020" aria-disabled="false" aria-selected="false">9</div>
我用aria-label找到了这个想法 我现在的代码是
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR,Integer.valueOf(params.getFraAar()));
cal.set(Calendar.MONTH,Integer.valueOf(params.getFraMnd()) - 1);
cal.set(Calendar.DAY_OF_MONTH,Integer.valueOf(params.getFraDag()));
cal.add(Calendar.DAY_OF_MONTH,1);
SimpleDateFormat format1 = new SimpleDateFormat("EEE. d. MMM yyyy",Locale.GERMAN);
String fraDato = format1.format(cal.getTime());
WebElement fraDatoElement = driver.findElement(By.xpath("//*[@id=\"root\"]/div/div[1]/div[2]/div[1]/div/div/div/div[2]/div[1]/div[2]/div[1]/div/div[1]/div"));
fraDatoElement.click();
WebElement fraDatoWeb = driver.findElement(By.xpath("//*[@id=\"root\" and contains(@class=\"DayPicker-Day\") and contains(@aria-label='" + fraDato + "')]"));
fraDatoWeb.click();
我不知道该怎么办:/一直以来我都没有这种元素异常。
解决方法
尽量不要使用您所描述的xpath。而是使用缩短的相对路径。由于DOM树可以在任何地方更改,因此将阻止获取NoSuchElementException
。
此外,此xpath错误:
WebElement fraDatoWeb = driver.findElement(By.xpath("//*[@id=\"root\" and contains(@class=\"DayPicker-Day\") and contains(@aria-label='" + fraDato + "')]"));
应为:
WebElement fraDatoWeb = driver.findElement(By.xpath("//*[@id='root' and contains(@class,'DayPicker-Day') and contains(@aria-label,'" + fraDato + "')]"));