Нужна помощь в ожидании

В настоящее время я делаю небольшой проект по веб-автоматизации. Это для онлайн-ставок в реальных залах рулетки,

Моя проблема в том, что это живые трансляции, в которых есть элементы управления, которые показывают вам вещи на экране, а также контролируют, когда и когда нельзя делать ставку на номер.

один из этих элементов управления - это 15-секундные часы, которые появляются и исчезают, в то время как видимые и отсчитывающие время вы можете делать ставки, когда они заканчиваются, они исчезают, и вам нужно подождать, пока дилер раскрутит шар, и результат и часы снова появятся прежде чем вы сможете сделать ставку снова.

Я рассчитываю автоматизировать весь процесс размещения ставок и определенных вещей, происходящих при определенных условиях.

Но он основан на том, когда эти часы видны, потому что это единственный раз, когда вы можете делать ставки, и, поскольку нет определенного времени, когда мяч будет вращаться и приземляться, мой единственный реальный вариант - wait for the clock element быть видимым (html он появляется и снова появляется в инспекторе на Chrome (я предполагаю, что это ajax использовался))

поэтому я стремлюсь использовать свободное ожидание без тайм-аута (оно буквально будет просто ждать появления элемента, потому что он появится несмотря ни на что)

Есть ли способ сделать "ожидание" в селене (с Java), чтобы не было времени ожидания, но вы можете опрашивать каждую секунду??? например, я знаю, иногда 0 используется, чтобы сказать, нет ограничения по времени... кто-нибудь может помочь?

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

ура ребята

WebElement myDynamicElement = (new WebDriverWait(driver, 10))
.until(ExpectedConditions.presenceOfElementLocated(By.id("my_element")));

3 ответа

Я не вижу, как это возможно. Вот как until Метод реализован:

    def until(self, method, message=''):
    """Calls the method provided with the driver as an argument until the \
    return value is not False."""
    screen = None
    stacktrace = None

    end_time = time.time() + self._timeout
    while True:
        try:
            value = method(self._driver)
            if value:
                return value
        except self._ignored_exceptions as exc:
            screen = getattr(exc, 'screen', None)
            stacktrace = getattr(exc, 'stacktrace', None)
        time.sleep(self._poll)
        if time.time() > end_time:
            break
    raise TimeoutException(message, screen, stacktrace)

Как вы можете видеть, текущее время сравнивается с end_time это время, когда функция вызывается плюс время ожидания. Чтобы решить вашу проблему, я бы использовал довольно большое количество секунд.

Как вы пытаетесь призвать click() на элементе так, вместо того, чтобы использовать presenceOfElementLocated() вам нужно использовать elementToBeClickable() и вы можете использовать любую из следующих стратегий локатора:

  • С помощью cssSelector:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("cssSelector_my_element"))).click();
    
  • С помощью xpath:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("xpath_my_element"))).click();
    

В приведенных выше решениях кода опрос установлен на default т.е. 500 ms, Вы можете установить опрос 1 sec следующее:

  • С помощью cssSelector:

    new WebDriverWait(driver, 20, 1).until(ExpectedConditions.elementToBeClickable(By.cssSelector("cssSelector_my_element"))).click();
    
  • С помощью xpath:

    new WebDriverWait(driver, 20, 1).until(ExpectedConditions.elementToBeClickable(By.xpath("xpath_my_element"))).click();
    

Да, есть способ опроса. Но вы должны установить timeOut. Это даст вам решение. В этой инициализации третьим параметром является время опроса. Каждую 1 секунду он будет выполнять опрос для этого элемента.

WebElement myDynamicElement = (new WebDriverWait(driver, 60 , 1))
.until(ExpectedConditions.presenceOfElementLocated(By.id("my_element")));
Другие вопросы по тегам