首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将从后端获取的list<>of数据与Ui元素进行比较

如何将从后端获取的list<>of数据与Ui元素进行比较
EN

Stack Overflow用户
提问于 2020-09-11 13:48:53
回答 3查看 53关注 0票数 0

如何通过在selenium java中获取整个list<>of的数据来比较从后台获取到java代码中的div数据与ui元素?请建议是否有方法可以从ui获取所有元素的文本(),并将其放入driver.findelements以外的列表中

EN

回答 3

Stack Overflow用户

发布于 2020-09-11 13:58:57

您可以遍历for循环并检查您的文本

代码语言:javascript
复制
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;
            }
        }
    }
}
票数 1
EN

Stack Overflow用户

发布于 2020-09-11 14:20:31

正如问题中提到的,您正在寻找driver.findElements()的替代方案。您可以使用如下所示的JavaScript Executor来实现相同的目的。

代码语言:javascript
复制
    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());
    }
票数 0
EN

Stack Overflow用户

发布于 2020-09-11 18:05:34

使用Java stream API可以很容易地做到这一点。假设您的页面如下所示(假设您已将代码保存到/tmp/texts.html):

代码语言:javascript
复制
<html>
  <head/>
  <body>
    <div id="root">
      <div>text 1</div>
      <div>
        <div>text 2</div>
        <div>text 3</div>
      </div>
    </div>
  </body>
</html>

现在,您可以执行以下操作:

代码语言:javascript
复制
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::*)]部分意味着我们只获取叶节点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63841432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档