select 在 webdriver 中有文本的任何元素

select any element that has text in webdriver

我希望使用 webdriver 实施一般本地化测试,我的想法是:

  1. Select 所有包含文本的元素
  2. 使用 java 语言识别库来验证文本是否使用某种特定语言

我查找了使用文本 select 元素的各种方法,但记录的所有内容似乎都显示了使用 contains() 或 text()

使用特定文本进行定位的方法

我认为以下方法可行:

//*[contains(text(), '')]

但是 select 就是一切,不管它有没有文字。它还在 header 中包含 selects 个元素。我想 select 页面上的所有可见文本,提取该文本并将其逐个元素地通过语言识别库。

您可以使用这个 XPath

//*[text() != ""]

这将为您提供所有带有非空文本的元素。
这样

List<WebElement> list = driver.findElements(By.xpath("//*[text() != '']"));

将为您提供页面上包含文本的所有网络元素的列表。
UPD
如果您只想获取包含文本本身的元素,您可以通过以下代码排除仅在其子元素中包含文本的元素:

List<WebElement> real = new ArrayList<>();
for(WebElement element : list){
    js = (JavascriptExecutor)driver;
    String text = js.executeScript("""
    return jQuery(arguments[0]).contents().filter(function() {
        return this.nodeType == Node.TEXT_NODE;
    }).text();
    """, element);
    if(text.length()>0){
        real.add(element);
}

最终的元素列表将在 real 列表中。
这个想法来自here. Translated from Python to Java according to this语法