【问题标题】:Select Element By Text in Selenium在 Selenium 中按文本选择元素
【发布时间】:2023-03-16 11:25:01
【问题描述】:

这听起来很简单,但是为什么没有方法可以通过它来查找元素 不使用 xpath 的内部文本? 例如有一个元素:

<button>Some Text</button>

并且 Selenium 不提供任何方法来通过内部文本选择它。 比如:

driver.findElement(By.innerText("Some Text");

通过内部文本查找元素的另一种方法是什么? xpath我很了解,但是由于项目的限制,我不能使用它。

【问题讨论】:

    标签: java selenium


    【解决方案1】:

    有一个linkText方法:

    driver.findElement(By.linkText("Some Text"))
    

    你还有partialLinkText:

    driver.findElement(By.partialLinkText("Partial Text"))
    

    例如,见how-to-locate-element-by-link-text-and-partial-link-text-locator

    编辑: 正如@Cajova_Houba 提到的,它仅适用于锚元素&lt;a&gt;

    【讨论】:

    • 列出的方法将选择具有标签的元素,方法不适用于其他元素
    • @NodirNasirov 你是对的!请参阅答案中的最后一行...这是一个很好的问题,因为我已经投票了...我认为您应该通过 GitHub 向 selenium 建议此功能...至于我的回答,一些堆栈溢出用户可能会发现它很有帮助。 ..所以我的答案...
    【解决方案2】:

    尝试使用 XPath 中的方法。

    driver.findElement(By.xpath("//button[text()='Some Text']"));
    

    希望这会奏效!

    【讨论】:

    • 如果你看了这个问题,我说我很了解xpath,并且项目有限制,禁止使用xpath。
    【解决方案3】:

    我认为这适用于 java。

            WebElement chosenElement;
            List<WebElement> elements = driver.findElements(By.tagName("button"));
            for(WebElement element:elements){
                if(element.getText().equals("Some Text")){
                    chosenElement = element;
                    break;
                }
            }
    

    【讨论】:

    • 我承认我从未见过有 1000 多个按钮的页面,但我相信它们确实存在。我不知道 findElements 需要多长时间才能找到页面上的所有元素,但我认为 java 循环可以处理数千个项目而没有明显的延迟。
    【解决方案4】:

    根据Selenium documentation,似乎不是每个元素都可以。你可以尝试使用

    By.linkText("link text")
    

    By.partialLinkText("partial link text")
    

    但这仅适用于锚元素 (&lt;a&gt;)。

    【讨论】:

    • 我知道linkText和partialLinkText,这些方法只适用于链接,不适用于带有其他标签的元素
    猜你喜欢
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-26
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 2012-07-09
    相关资源
    最近更新 更多