如何使用 java 查找和列出 ul li 标签下的元素和 ul li 在 selenium 中的 div 下?

How to find and list element which comes under a tag of ul li and ul li comes under div in selenium using java?

网站:https://stores.lenskart.com/ 在此网站中,我想列出商店名称、地址和手机号码

下面是我试过的代码。

public class fetchdata {

public void fetchbengaluru() {
    suites.setupEnviroment();
    WebDriver driver = suites.getWebDriver();
    List<WebElement> div1 = driver.findElements(By.xpath("//div[@class='border-manage store-info-box']"));
    System.out.println("No. of Stores: " + div1.size());

    try {
        for (int i = 0; i < div1.size(); i++) {
            String storename = div1.get(i).findElement(By.xpath("//div[@class='store_name']")).getText();
            System.out.println("Store Name" + storename);
        }
    } catch (Exception e) {
        System.out.println(e);
    }
}
}

在上面的代码中,我得到的商店总数为 20,但无法列出他们的姓名和手机号码。 显示元素未找到消息 根据我的理解,我无法找到该元素,因为它来自 ul-li 和标签

试试下面的代码,我们需要 select Xpath 以正确的方式填充数据。

driver.get("https://stores.lenskart.com/");
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
        driver.findElementById("OutletSearch").sendKeys("Chennai", Keys.ENTER);

List<WebElement> storedetails = driver.findElementsByXPath("//a[@title='Lenskart.com']/b");

int storecount = storedetails.size();
        System.out.println(storecount);


for(int i=1;i<=storecount;i++) {

            String storename = driver.findElementByXPath("//div[@class='border-manage store-info-box']["+i+"]/ul//b").getText();

            String storephonenumber = driver.findElementByXPath("//div[@class='border-manage store-info-box']["+i+"]/ul/li[6]").getText();

            System.out.println(storename + " : "+storephonenumber.substring(0, 13));
        }

输出结果如下

Lenskart.com 在 Purasawalkam:+91******

Lenskart.com 在 Nungambakkam:+91******

Lenskart.com 在 Tondiarpet:+91******

Lenskart.com 在罗亚普拉姆:+91******

Lenskart.com 在 Mylapore:+91******

你可以简单的存入list,然后借助for循环一个一个打印出来

我只得到 "total" as total=address.size() 一次,因为所有 3 个元素都相同,然后打印所有值。

package newproj;
import java.util.List;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class Lenskart {

public static void main(String[] args) throws InterruptedException {
    // TODO Auto-generated method stub
    String url="https://stores.lenskart.com";
    System.setProperty("webdriver.chrome.driver", "D:\Selenium\chromedriver_win32\chromedriver.exe");
    WebDriver driver = new ChromeDriver();
    driver.get(url);
    driver.manage().window().maximize();

    Thread.sleep(5000);
    List<WebElement> name=driver.findElements(By.xpath("//li[@class='store_name redirectHome']"));

    List<WebElement> address=driver.findElements(By.xpath("//li[@class='store_address redirectHome']"));

    List<WebElement> phone=driver.findElements(By.xpath("//li[@class='store_phone']"));

    int total=address.size();
    for(int i=0;i<total;i++)
    {
        System.out.println("\n");
        System.out.println("New address="+i);
        System.out.println(name.get(i).getText());
        System.out.println(address.get(i).getText());
        System.out.println(phone.get(i).getText());
        System.out.println("\n");
    }
    driver.close();
}

}

输出将采用这种模式。

新地址=0
Lenskart.com 科学城路, Sola
御坊地下01号铺
索拉科学城路
艾哈迈达巴德 - 380060
+917428891186
呼叫

新地址=1
Lenskart.com 在 Gurukul 路,Memnagar
Shilp Complex 1号铺
Gurukul 路,Memnagar
艾哈迈达巴德 - 380052
+917428891192
呼叫

.....

and so on.

.

希望对您有所帮助。