Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Подсчитать кол-во элементов в динамическом фильтре

webdriver
Теги: #<Tag:0x00007f7b65a37630>

(Artem Timac) #1

Это страничка из Яндекс.Маркет. Проблема в том, что я никак не могу вытащить этот текст (95 моделей):

Обращался и через Xpath, и через CSS.

Подсчитать просто объекты проблематично, т.к. нужно подгрузить все остальные страницы. Иначе webdriver мне выдает дефолтные 10 объектов с первой страницы.


(James May) #2

а какой xpath пробовали?


(Artem Timac) #3

driver.FindElement(By.XPath("/html/body/div[1]/div[4]/div[2]/div[2]/div[2]")).Text;


(James May) #4

а если так:
//div[contains(@class,'filter-panel-counter')]

Этот тултип очень быстро исчезает, кстати. Может Вы просто не успеваете его считать?


(Artem Timac) #5

Не помогло.

Исчезает да быстро, но как быть?) Я дальше никуда не перехожу, и браузер открытым оставляю.


(James May) #6

Если совсем просто, то вот так. Проверил - работает

wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//input[@id='glf-pricefrom-var']")));
        WebElement element = driver.findElement(By.xpath("//input[@id='glf-pricefrom-var']"));
        element.sendKeys("400");
        element.sendKeys(Keys.ENTER);
        wait.pollingEvery(500, TimeUnit.MILLISECONDS).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[contains(@class,'filter-panel-counter')]")));
        WebElement elem = driver.findElement(By.xpath("//div[contains(@class,'filter-panel-counter')]"));
        String text = elem.getText();
        System.out.println("TEXT : " + text);

(Stan) #7

Внесу свое наркоманство.

String js = "return document.querySelector('.filter-panel-counter').innerHTML.replace(/\D+/g, '')";
String count = (String) ((JavascriptExecutor) driver).executeScript(js)

и не надо следить исчез он или нет, жс-у пофиг


(Artem Timac) #8

Большое спасибо! Честно говоря не думал, что ожидания тут помогут, урок мне на будущее.