【问题标题】:How to handle dynamic xpaths如何处理动态 xpath
【发布时间】:2015-02-14 07:19:28
【问题描述】:

我需要根据我的搜索操作选择返回的文本。 对于每次搜索,xpaths 都会有所不同。这些是搜索时返回的各种 xpath

.//*[@id='messageBoxForm']/div/div[1]/div[1]/div/div[1]/div[1]/span/input

.//*[@id='messageBoxForm']/div/div[1]/div[1]/div/div[2]/div/div/div[2]/div[2]/strong

【问题讨论】:

    标签: java javascript xpath selenium-webdriver


    【解决方案1】:

    您可以将它放在 try-catch-block 中,并在 try 中使用第一个 x-path,捕获 Selenium 可能抛出的“NoSuchElementException”,然后尝试另一个 x-path。

    根据您发布的标准,这应该可以完成工作。

    WebElement element;
    try {
        element = webDriver.findElement(By.xpath("xyz"));
    } catch (NoSuchElementException e) {
    element = webDriver.findElement(By.xpath("abc"));
    } 
    

    ...用你的元素做事

    【讨论】:

    • 如果它只有两个元素我们可以放置。但是它有很多元素.//[@id='messageBoxForm']/div/div[1]/div[1]/div/ div[2]/div/div/div[i]/div[2]/strong 在我写“i”的地方,值会增加,不确定会出现多少元素。
    • 然后在字符串列表中定义您的 x-path,对其进行迭代并在找到元素时中断循环,否则捕获异常,并在迭代中进行下一步。这种方法感觉不好,你应该考虑一个不同的解决方案,因为如果 x-path 匹配真正不同的东西,这可以选择你不想选择的元素。
    • 你需要有一些父元素。这就是您开始注意到 x 路径变化的地方。此时您可以使用“webDriver.findElements”(注意末尾的“s”)来查找元素列表。从那里你需要一些东西,你可以迭代不同的可能 x 路径,直到一个匹配。此外,我会反过来迭代 x 路径。你应该在一定程度上知道这些。
    • 谁能解释如何通过使用 start with 或 contains 为上述 xpaths 编写自定义 xpath
    猜你喜欢
    • 2021-10-08
    • 1970-01-01
    • 2020-06-29
    • 2016-03-07
    • 1970-01-01
    • 2017-04-15
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多