我希望使用webdriver实施通用本地化测试,我的想法是:选择包含文本的所有元素使用java语言标识库验证文本是否使用某种特定语言我查找了使用文本选择元素的各种方法,但所有文档似乎都显示了使用contains()或text()使用特定文本进行定位的方法我认为以下方法可行:
//*[contains(text(), '')]
但无论是否有文本,它都会选择所有内容。它还选择标题中的元素。我希望选择页面上所有可见的文本,提取该文本并逐个元素地通过语言标识库。
kgsdhlau1#
您可以使用这个xpath
//*[text() != ""]
这将为您提供具有非空文本的所有元素。以便
List<WebElement> list = driver.findElements(By.xpath("//*[text() != '']"));
将为您提供包含文本的页面上所有web元素的列表。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 列表这个想法来自这里。根据此语法从python翻译为java
real
1条答案
按热度按时间kgsdhlau1#
您可以使用这个xpath
这将为您提供具有非空文本的所有元素。
以便
将为您提供包含文本的页面上所有web元素的列表。
upd
如果希望仅获取包含文本本身的元素,则可以仅通过以下代码排除子元素中包含文本的元素:
最终的元素列表将在
real
列表这个想法来自这里。根据此语法从python翻译为java