Как найти и перечислить элемент, который попадает под тег ul li и ul li попадает под div в selenium с использованием Java? - PullRequest
0 голосов
/ 24 октября 2019

Веб-сайт: 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);
    }
}
}

In вышекод я получаю общее количество магазинов как 20, но не могу перечислить их имена и номер мобильного телефона. Отображается сообщение об отсутствии элемента. Насколько я понимаю, я не могу найти элемент, потому что он подходит под ul-li и тегом

Ответы [ 3 ]

0 голосов
/ 24 октября 2019

Попробуйте приведенный ниже код, нам нужно правильно выбрать 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 на Тондиарпете: +91 ******

Lenskart.com на Рояпураме: +91 ******

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

0 голосов
/ 25 октября 2019

Вы можете просто сохранить его в списке и распечатать элементы по одному с помощью цикла for.

Я получаю "total" как 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 на Science City Road, Sola
Магазин № 01, Первый этаж, Королевская площадь
Science City Road, Sola
Ахмедабад - 380060
+ 917428891186
CALL

Новый адрес = 1
Lenskart.com на Gurukul Road, Memnagar
Магазин № 1, Shilp Complex
Gurukul Road, Memnagar
Ahmedabad - 380052
+ 917428891192
CALL

....

и т. Д.

.

Я надеюсь, что этопомогает.

0 голосов
/ 24 октября 2019

Ваш 2-й Xpath неверен

Ваш Xpath

//div[@class='store_name']

Название магазина Xpath:

//li[@class='store_name redirectHome']//b

Телефон магазина:

//li[@class='store_phone']

Обратите внимание, что выше xpath также возвращает список, поэтому вам нужно итерировать их тоже

...