Ответы пользователя по тегу Java
  • Как в Selenium Java получить в элементах интрересующие атрибуты (метод findElements()), а потом нажать, в любой элемент, который подходит?

    @Miron11
    Пишу sql 20 лет. Срок :)
    I think you just dialed a bit too far with
    time = driver.findElements(By.xpath(TIME_CHECK)).iterator().next().getAttribute("class");
    with . approach.
    Usually what we do, if you do want to use this convoluted one - liner ( in c# for example ) is call ( this is a pseudocode )
    .iterator().firstOrDefault()
    and that way we get the value.
    In Java I think there are methods such as tail(x) / head(x) / first(x) invoked on the collection ( here it is probably the return of findElement()) which will return an array from which you can take [0] element ( which may fail to null exception )
    The Java pattern is to first check for null and than perform value access.
    So, you can see that while one - liner can look nice, it would require a bit higher effort at understanding internals.
    Simpler pattern is to scroll using iterator
    while(driver.findElements(By.xpath(TIME_CHECK)).iterator().next()) {
    x = driver.findElements(By.xpath(TIME_CHECK)).iterator().current() / item()
    myValue = x.method / property
    break or something else
    }
    This takes a few more lines, but is easy to follow and debug. Personally, I use both approaches, depending on context, but when in doubt the easier one.
    ---
    I was under impression this is where error occurs ( please correct me if I am wrong ).
    If my understanding is correct, the rest looks like somewhat working approach.
    Except it's probably an pattern specific to Selenium.
    In an application, if I wanted to be able to perform some action on items, found in the cycle of the iterator above, while cycle is still running, I'd use a
    yeld
    pattern, and organize concurrency by means of function invoked in yeld block with item / value passed as parameter. Give me a moment to find an example.
    Darn it, yeld is c# pattern, ported to java only as of release 13.
    So, just save the value to list in the cycle and run over it once iterator is done.
    It shouldn't take too long.
    Ответ написан
    Комментировать
  • Русский open-source, есть ли он?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Сделай свой?
    Для начала не надо даже создавать продукт, в привычном понимании слова. Сделайте, например, словарь выражений для выборки данных. Презентуйте здесь с просьбой о критике.
    Мы пока говорить с машинами по-русски не умеем, а должны.
    Я сам пробовал, но я музыкант. У меня на каждый полутон по 200 приемов, как его разукрасить. Здесь не нужно быть старшим. Достаточно быть просто технически грамотным.
    Ответ написан
    Комментировать
  • Как оформить все свойства книг не через константы?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Try Delta Lake Connectors:
    This is a path to use dataframe ( with data stored in something like parquet ).
    This allows to store / maintain data in a simple and portable data store.
    You can keep it on local machine, or push to cloud.
    Access using above or any other technology, capable of understanding parquet.
    In its simplest direct application DSR/DSW provides for
    .filter
    and other expressive methods, good for business and pleasure to code.
    And you won't have to struggle with nested maps and such, which will be dead - end regardless, once number of books is larger than, say, 500, or you need to produce monthly report from bot activities, whichever comes first :)
    Ответ написан
    Комментировать
  • Как в Selenium Java обойти UnhandledAlertException?

    @Miron11
    Пишу sql 20 лет. Срок :)
    catch "Throwable t" ( if it exists in this variant of Java ).
    The downside, if it is intercepted, it may, potentially, intercept everything else.
    So, you may want to check for specific error message, before letting it be ignored.
    So that you do not miss something interesting.
    Ответ написан
  • Как прочитать и распаковать Rar/Zip файл?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Дефолт должна работать. Отсутствие "header" почти наверняка означает, что файл был обработан не утилитой, но кодом. Утилиты обязательно создают header запись.
    Возможно надо покопаться в документации дефолт библиотеки, как обработать stream, а не архив. Во всяком случае для zip файлов. Rar, возможно, имеет другие требования.
    Ответ написан
    Комментировать
  • VisualVM или IDEA?

    @Miron11
    Пишу sql 20 лет. Срок :)
    Видимо коллекции рассредоточены в потоках ( threads ) которые что - то удерживает в памяти.
    Если Вы пользуетесь потоками ( thread ) непосредственно, то наверное надо вызывать "return" в методе run, чтобы они сигналили процесс, что их можно безопасно чистить, если же они в некоем контейнере, которым управляет некий объект по умолчанию ( pool ), то здесь все зависит от контейнера, есть хорошие, но бывают всякие :)
    Ответ написан
    Комментировать
  • Как вывести все индексы массива, соответствующие условию?

    @Miron11
    Пишу sql 20 лет. Срок :)
    public class StatsService {
    
        public ArrayList<Integer> monthsOfTopSales(long[] sales) {
    
            long topSale = sales[0];
            Integer month = 0;
            ArrayList<Integer> topMonths = new ArrayList<Integer>();
    
            for (long sale : sales) {
                month ++;
                if (topSale < sale) {
                    topSale = sale;
                    topMonths.clear();
                    topMonths.add(month);
                } else if ( topSale == sale ) {
                    topMonths.add(month);                
                }
            }
            return topMonths;
        }
    
    }
    Ответ написан
    Комментировать
  • Как организовать хранение объектов в БД?

    @Miron11
    Пишу sql 20 лет. Срок :)
    А почему не выделить число, начинающееся от 1, увеличивающееся на единицу с каждым шагом. И идентифицировать все события произошедшие от начала отрезка времени и до начала следующего отрезка времени, не включая само начало следующего отрезка, этим идентификатором.

    Таким образом в дне 96 таких отрезков, в году 36500 - 4 * 365 = 36500 - 1460 = 35040 шагов в год ( +96 в високосный ). Получается что с одним глобальным объектом - секвенцией - который постоянно прирастает на единицу с помощью метронома выставленного на 15 минут, можно обслуживать всю базу авторитетным единым источником идентификатора текущего промежутка времени, не тратя время на вычисления внутри отдельно взятой процедуры или запроса.

    По - моему в Постгрес для этого даже есть какие - то очень удобные рычаги, позволяющие задать развертку, глобальную или более узкого обзора, которая обеспечит доступ к такому объекту, как к глобальной переменной, с минимальными затратами ресурсов.
    Ответ написан
    Комментировать