【问题标题】:Selenium, how to click elementwith dynamic xpath without idSelenium,如何使用没有 id 的动态 xpath 单击元素
【发布时间】:2021-02-23 07:39:04
【问题描述】:

我看到有几个与此类似的问题,但对我有用。 我正在使用一些 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 finbd id 我现在的代码是

                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();

我不知道该怎么做:/一直没有这样的元素异常。

【问题讨论】:

    标签: java selenium rpa


    【解决方案1】:

    尽量不要使用您所描述的此类 xpath。而不是这样,使用缩短的相对路径。它将阻止获取NoSuchElementException,因为 DOM 树可以在任何地方更改。

    另外,这个 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 + "')]"));
    

    【讨论】:

    • 感谢您的回答 :) 我以前从未使用过机器人框架,并且遇到了很多麻烦。不幸的是,来自你的 anwer 的 xpath 不起作用。还是一样的异常
    • @Wojtas 我在 xpath 的问题中提到的元素中看不到 id=root 属性。也许这就是问题所在?
    • 我用这个 xpath 修复了它 datoWeb = driver.findElement(By.xpath("//*[@aria-label='" + date + "']"));
    猜你喜欢
    • 1970-01-01
    • 2021-05-05
    • 2021-07-31
    • 2017-02-04
    • 2019-08-27
    • 2018-09-04
    • 2013-01-13
    • 2021-04-24
    • 2017-03-22
    相关资源
    最近更新 更多