【问题标题】:How can i compare the list<>of data which i have fetched from backend to Ui elements如何比较从后端获取的数据列表<>与 Ui 元素
【发布时间】:2020-09-11 18:05:33
【问题描述】:

如何通过在 selenium java 中获取整个 div 的数据来比较从后端获取到我的 java 代码中的数据列表与 ui 元素?请建议是否有一种方法可以从 ui div 中获取所有元素的 text() 并放入 driver.findelements 以外的列表中

【问题讨论】:

    标签: java list selenium


    【解决方案1】:

    您可以通过 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;
                }
            }
        }
    }
    

    【讨论】:

      【解决方案2】:

      如问题中所述,您正在寻找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());
          }
      

      【讨论】:

        【解决方案3】:

        您可以使用 Java 流 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);
        }
        

        此示例演示如何使用单个流表达式从元素中收集文本。

        P.S. - xpath 中的 [not(child::*)] 部分意味着我们只获取叶节点。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-01-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多