select 在 webdriver 中有文本的任何元素
select any element that has text in webdriver
我希望使用 webdriver 实施一般本地化测试,我的想法是:
- Select 所有包含文本的元素
- 使用 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语法
我希望使用 webdriver 实施一般本地化测试,我的想法是:
- Select 所有包含文本的元素
- 使用 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语法