有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java需要关于等待超时的帮助

我目前正在做一个关于网络自动化的小项目。它用于在现场轮盘赌休息室进行在线赌博

我的问题是,因为这些是实时流媒体活动,所以它们有适当的控件,可以在屏幕上显示内容,还可以控制何时以及何时不能对数字下注

其中一个控件是一个出现和消失的15秒时钟,在可见和倒计时时,您可以下注,当它用完时,它消失,您必须等待庄家旋转球,等待结果和时钟重新出现,然后才能再次下注

我正在寻找自动化的整个过程中下注和某些事情发生在某些条件下

但这是基于时钟何时可见,因为这是你唯一可以下注的时间,而且由于没有确切的时间球会旋转和落地,我唯一的实际选择是wait for the clock element可见(它在chrome上的检查器中出现并重新出现(我想这是ajax

因此,我希望使用流畅的等待,没有超时(它实际上只是等待元素出现,因为无论发生什么,它都会出现)

有没有办法在selenium(使用java)中进行“等待”,这样就没有超时,但您可以每秒轮询一次???例如,我知道有时候0表示没有时间限制。。。有人能帮忙吗

我这里有一个代码示例,这是我唯一需要帮助的部分,我知道它必须很简单,不需要太多的代码

干杯,伙计们

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

共 (3) 个答案

  1. # 1 楼答案

    我不明白这怎么可能。以下是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相比较,后者是调用函数的时间加上超时。 要解决你的问题,我需要相当多的时间

  2. # 2 楼答案

    是的,有一种投票方式。但你必须设置超时。这将为您提供解决方案。在此初始化中,第三个参数是轮询时间。每隔1秒,它就会对该元素进行轮询

    WebElement myDynamicElement = (new WebDriverWait(driver, 60 , 1))
    .until(ExpectedConditions.presenceOfElementLocated(By.id("my_element")));
    
  3. # 3 楼答案

    当您试图在元素上调用click()时,您需要使用{}而不是使用presenceOfElementLocated(),您可以使用以下任意一种Locator Strategies

    • 使用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();