Selenium try / catch click занимает много времени? - PullRequest
0 голосов
/ 11 февраля 2020

У меня всегда возникает проблема при написании тестов Selenium, когда попытка щелкнуть по элементу, который не готов, может привести к исключению StaleElementReference / ElementClickIntercepted. Это позволило сделать тесты нестабильными, сделав тесты неудачными там, где они были успешными, если я просто подожду 2 секунды, чтобы элемент стал активным для клика. для появления элемента в течение примерно 2 секунд, прежде чем я считаю его отсутствующим, и я пытался создать функцию clickElement(), которая окружает функцию basi c click() для выполнения той же цели.

Его цель - продолжать пытаться нажимать с шагом 100 мсек, пока это не удастся. Я делаю это, перехватывая исключения и увеличивая счетчик для каждого клика, и выбрасываю из l oop только когда элемент нажат или слишком много попыток щелкнуть вызвали исключения.

Это функция I писал (а):

public void clickElement(WebElement element) {
    int maxTimeOut = 50;
    int timeOutCt = 0;
    boolean isTimedOut = false;
    System.out.println("=> Try to click on <" + element.getTagName() + ">");
    while ( !isTimedOut ) {
        try {
            element.click();
            isTimedOut = true; // could click
            System.out.println("\n OK \n");
        } catch (Exception e) {
            waitSeconds(0.1);
            timeOutCt++;
            System.out.println(" \t => Error while attempting to click for the " + timeOutCt +"nd time \n");
            if ( timeOutCt > maxTimeOut ) { 
                isTimedOut = true;
                fail("Element <" + element.getTagName() + "> is not clickable. See exception:  " + e);
            }
        }
    }
}

waitSeconds:

public void waitSeconds(double t) {
    long mT = (long) (t * 1000);
    try {
        System.out.print("\n \t \t ( ) Sleep de " + mT + "secondes"); 
        Thread.sleep(mT);
        System.out.print(" ... Done \n ");
    }
    catch (InterruptedException e) {
       e.printStackTrace();
    }
}

Проблема, с которой я столкнулся, заключается в том, что выполнение этого, по-видимому, занимает абсурдно много времени, по крайней мере, дольше миллисекунды, по крайней мере, я могу сказать, что это длится более секунды. Я подумал, что, возможно, моя waitSeconds() функция не работает должным образом, но я протестировал ее в простой программе, и она работает как следует: waitSeconds(0.1) приводит к ожиданию 100 мс.

Так почему же это когда clickElement вызывается, и он пытается нажать на элемент несколько раз, это может занять до двух секунд между двумя попытками?

Это замедляет вывод на консоль?

Или это что-то типа «попробуй / поймай», что все испортило?

Ответы [ 2 ]

1 голос
/ 12 февраля 2020

Я столкнулся с чем-то похожим для try / catch. Попробуйте отключить неявное ожидание перед блоком try / catch и снова включить его после catch. Надеюсь, это поможет.

0 голосов
/ 17 февраля 2020

Предложение

  1. Если вы используете неявное ожидание в начале, удалите его и используйте явное ожидание, когда вы хотите ждать.
  2. Используйте, если условие до того, как вы попытаетесь выполнить щелчок, т. е. если элемент видим, нажмите только на элемент
  3. . Используйте ключевое слово break после выполнения, чтобы нажать

. Пожалуйста, попробуйте это, надеюсь, это решит вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...