【问题标题】:Selenium Webdriver: Click video control play buttonSelenium Webdriver:点击视频控制播放按钮
【发布时间】:2014-08-10 19:31:12
【问题描述】:

如何单击此页面上视频的视频控件中的播放按钮? http://prolifiq.com/inside-prolifiq/tiles/invite/

以下是页面来源。我确实看到了一个看起来像 javascript 'playpause' 控件的东西,但我不知道如何点击它。

<div id="videoModal" class="reveal-modal expand open" style="display: block; opacity: 1; visibility: visible; top: 100px;">
<video id="wp_mep_1" width="709" height="540" preload="none" controls="controls" poster="http://prolifiq.com/wp-content/themes/prolifiq/img/bgr-video.png">
<source type="video/mp4" src="http://prolifiq.com/wp-content/themes/prolifiq/videos/Prolifiq-Invite.mp4"></source>
<source type="video/webm" src="http://prolifiq.com/wp-content/themes/prolifiq/videos/Prolifiq-Invite.webm"></source>
<object width="709" height="540" data="http://prolifiq.com/wp-content/plugins/media-element-html5-video-and-audio-player/mediaelement/flashmediaelement.swf" type="application/x-shockwave-flash">
</video>
<script type="text/javascript">
jQuery(document).ready(function($) {
$('#wp_mep_1').mediaelementplayer({
m:1
,features: ['playpause','current','progress','duration','volume','tracks','fullscreen']
});
});
</script>
<a class="close-reveal-modal">×</a>
</div>

我可以使用 xpath 点击播放器右上角的“x”按钮来关闭视频。

下面是我的代码:

import java.util.List;
import java.util.regex.Pattern;
import java.util.concurrent.TimeUnit;

import org.junit.*;

import static org.junit.Assert.*;
import static org.hamcrest.CoreMatchers.*;

import org.openqa.selenium.*;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class prolifictestscript {
  private WebDriver driver;
  private String baseUrl;
  private boolean acceptNextAlert = true;
  private StringBuffer verificationErrors = new StringBuffer();

  @Before
  public void setUp() throws Exception {
    driver = new FirefoxDriver();
    baseUrl = "http://prolifiq.com";
    driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
  }

  @Test
  public void testProlifictestscript() throws Exception {
    driver.get(baseUrl + "/");
    driver.findElement(By.xpath(".//*[@id='menu-item-1905']/a")).click();//click menu
    driver.findElement(By.linkText("Tiles")).click();//click sub menu
    driver.findElement(By.xpath("html/body/section[1]/div[2]/ul/li[5]/a")).click();//click invite tile
    List<WebElement> downloadHeader = driver.findElements(By.xpath("//h1[text() = 'Invite']"));//verify h1 invite exists
    if(downloadHeader.size() > 0)
    {
        System.out.println("Found h1 header Invite");
    }

    driver.findElement(By.xpath("html/body/section[1]/div/a/img")).click();//click movie box

    //driver.findElement(By.xpath(".//*[@id='videoModal']")).click();//.//*[@id='videoModal']//not working
    Thread.sleep(49000);//wait 49 seconds for video to end
    driver.findElement(By.xpath(".//*[@id='videoModal']/a")).click();//click x button
  }

  @After
  public void tearDown() throws Exception {
    //driver.quit();
    String verificationErrorString = verificationErrors.toString();
    if (!"".equals(verificationErrorString)) {
      fail(verificationErrorString);
    }
  }

  private boolean isElementPresent(By by) {
    try {
      driver.findElement(by);
      return true;
    } catch (NoSuchElementException e) {
      return false;
    }
  }

  private boolean isAlertPresent() {
    try {
      driver.switchTo().alert();
      return true;
    } catch (NoAlertPresentException e) {
      return false;
    }
  }

  private String closeAlertAndGetItsText() {
    try {
      Alert alert = driver.switchTo().alert();
      String alertText = alert.getText();
      if (acceptNextAlert) {
        alert.accept();
      } else {
        alert.dismiss();
      }
      return alertText;
    } finally {
      acceptNextAlert = true;
    }
  }
}

【问题讨论】:

  • 我感觉没有特定的“selenium webdriver”方式来执行此操作,因为您尝试单击的控件是 Flash 插件,而不是 html 元素。
  • 在一个类似的问题上找到了这个答案:“你可以使用 sfapi 通过它你会得到一个 SeleniumFlexAPI.swc 文件,你需要用你的 flex 应用程序编译它。SFAPI :code.google.com/p/sfapi 然后你可以通过使用 sfapi finctions 来使用 flex 应用程序。sfapi finctions : goo.gl/qAqso6 或者您可以通过图像处理使用 sikuli-api 这不是一个完美的方法,但如果您需要紧急解决方案,您可以使用它。code.google.com/p/sikuli-api" - Himanshu Tewari

标签: java javascript selenium selenium-webdriver webdriver


【解决方案1】:

使用 Javascript 来做到这一点,它在 Flash 播放器上运行良好 这里有一些关于可用标签HTML Audio/Video DOM Reference的信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-09
    • 1970-01-01
    • 2017-02-22
    • 1970-01-01
    相关资源
    最近更新 更多