如何通过在selenium java中获取整个list<>of的数据来比较从后台获取到java代码中的div数据与ui元素?请建议是否有方法可以从ui获取所有元素的文本(),并将其放入driver.findelements以外的列表中
发布于 2020-09-11 13:58:57
您可以遍历for循环并检查您的文本
following code for java , what I am doing here is open google browser and typing as "TESTING" AND store all results and checking word as "Testing Types" and click that option
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import java.util.List;
public class GooglesearchTests {
public static void main(String[] args) throws Exception {
System.setProperty("webdriver.chrome.driver", "C:\\Users\\User\\Downloads\\chromedriver.exe");
WebDriver driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get("https://www.google.com/");
driver.findElement(By.name("q")).sendKeys("Testing");
Thread.sleep(Long.parseLong("1000"));
List<WebElement> LIST = driver.findElements(By.xpath("//ul[@role='listbox']//li/descendant::div[@class='sbl1']"));
System.out.println(LIST.size());
for (int i = 0; i < LIST.size(); i++)
{
//System.out.println(LIST.get(i).getText());
if (LIST.get(i).getText().contains("testing types"))
{
LIST.get(i).click();
break;
}
}
}
}发布于 2020-09-11 14:20:31
正如问题中提到的,您正在寻找driver.findElements()的替代方案。您可以使用如下所示的JavaScript Executor来实现相同的目的。
List<String> lst = new ArrayList<String>();
JavascriptExecutor js = (JavascriptExecutor)driver;
Long length = (Long) js.executeScript("return document.getElementsByClassName('r').length");
for(int i=0; i<length; i++) {
lst.add((String) js.executeScript("return document.getElementsByClassName('r')[arguments[0]].innerText", i).toString().trim());
}发布于 2020-09-11 18:05:34
使用Java stream API可以很容易地做到这一点。假设您的页面如下所示(假设您已将代码保存到/tmp/texts.html):
<html>
<head/>
<body>
<div id="root">
<div>text 1</div>
<div>
<div>text 2</div>
<div>text 3</div>
</div>
</div>
</body>
</html>现在,您可以执行以下操作:
public void testList() {
driver.get("file:///tmp/texts.html");
List<WebElement> webElements = driver
.findElements(
By.xpath("//div[@id='root']//div[not(child::*)]"));
List<String> texts = webElements
.stream()
.map(webElement -> webElement.getText())
.collect(Collectors.toList());
System.out.println(texts);
}这个示例演示了如何使用单个流表达式从元素中收集文本。
xpath P.S.Xpath-的这个[not(child::*)]部分意味着我们只获取叶节点。
https://stackoverflow.com/questions/63841432
复制相似问题