Нужна помощь в ожидании - PullRequest
0 голосов
/ 02 апреля 2019

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

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

один из этих элементов управления - это 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 ]

0 голосов
/ 02 апреля 2019

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

WebElement myDynamicElement = (new WebDriverWait(driver, 60 , 1))
.until(ExpectedConditions.presenceOfElementLocated(By.id("my_element")));
0 голосов
/ 03 апреля 2019

Я не вижу, как это возможно. Вот как реализован метод 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, которое является временем, когда функция вызывается, плюс время ожидания. Чтобы решить вашу проблему, я использовал бы довольно большое количество секунд.

0 голосов
/ 02 апреля 2019

Когда вы пытаетесь вызвать 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();
    
...