选择硒中的按文本元素

时间:2019-01-10 16:11:19

标签: java selenium

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

<button>Some Text</button>

,并且Selenium没有提供任何通过内部文本选择它的方法。 像这样:

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

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

4 个答案:

答案 0 :(得分:4)

有一种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所述,它仅适用于锚元素<a>

答案 1 :(得分:0)

尝试在XPath中使用方法。

    String s = "the/quick/brown/fox/jumped/over/the/lazy/dog/";
    System.out.println(s.substring(0, nthLastIndexOf(2, "/", s)+1)); // substring up to 2nd last included
    System.out.println(s.substring(0, nthLastIndexOf(3, "/", s)+1)); // up to 3rd last inc.
    System.out.println(s.substring(0, nthLastIndexOf(7, "/", s)+1)); // 7th last inc.
    System.out.println(s.substring(0, nthLastIndexOf(2, "/", s))); // 2nd last, char itself excluded

希望这会起作用!

答案 2 :(得分:0)

我认为这适用于Java。

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

答案 3 :(得分:-1)

根据Selenium documentation,似乎并非每个元素都可行。您可以尝试使用

By.linkText("link text")

By.partialLinkText("partial link text")

但这仅适用于锚点元素(<a>)。