微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Selenium,如何单击没有ID的具有动态xpath的元素

如何解决Selenium,如何单击没有ID的具有动态xpath的元素

我看到有几个与此类似的问题,但对我来说都是可行的。 我正在使用一些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 + "')]"));

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。