2016-11-22 78 views
0

我正在使用硒(Java)自动化一个Web应用程序,它使用Youtube进度条,显示网页顶部的页面加载进度。我需要编写一个等待函数,等待这个进度条到达并加载页面。这些进度条没有任何自己的ID。我如何编码等待进度条完成加载?如何自动执行硒等待Youtube像步进酒吧

回答

1

YouTube的进度条具有在加载以下细节 -

<div id="progress" class="waiting" style="transition-duration: 900ms; width: 60%;"><dt></dt><dd></dd></div> 

随着加载继续width属性值增加至100%。然后这个进度条从DOM中删除(以及我无法在检查部分找到它)。尝试将网络速度从Chrome开发人员工具中调整到最小,以便在DOM中查看这一点。

您可以在此进度div宽度属性(需要自定义等待)或隐形或存在上设置显式等待。取决于你使用自动化的语言。甚至使用javascriptexecutor自定义等待来运行jquery来检查此元素。

0

首先这里是我经常用来确定元素是否可见的一些方法。对不起,这些是在C#不是Java,但应该非常接近。

public void WaitForElementVisibile(IWebDriver driver, By selector) 
    { 
     var attempts = 0; 
     while (attempts < 2) 
     { 
      try 
      { 
       WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(90)); 
       wait.PollingInterval = TimeSpan.FromMilliseconds(300); 
       wait.Until(ExpectedConditions.VisibilityOfAllElementsLocatedBy(selector)); 
       break; 
      } 
      catch (WebDriverException) 
      { 
       attempts++; 
      } 
     } 
     if (attempts >= 2) 
     { 
      TakeScreenshot(driver); 
      log.Error("Failed to located element " + selector.ToString() + " for " + Capabilities.BrowserName); 
      throw new NoSuchElementException("Cannot locate " + selector.ToString() + " for " + Capabilities.BrowserName); 
     } 
    } 

如果更换VisibilityOFAllElementsLocatedBy()InvisibilityOfElementLocated()将更改消息要等到一个元素是不可见的。

如果您对TakeScreenshot()方法感兴趣,我也可以提供。

但希望使用类似上述方法的东西,您可以等待加载完成后出现的元素。也许有一些文字显示“加载完成”或其他内容。

如果您提供Url以便我可以看到该页面,我可以提供进一步的帮助。希望这可以帮助。