Selenium - 点击youtube链接

时间:2014-01-27 14:04:12

标签: selenium xpath selenium-webdriver

我刚尝试打开youtube链接的第一个搜索结果。 这是我的代码。由于youtube结果在iFrame中,因此我使用了SwitchTo.frame()方法。

   String browser = "Chrome";
    WebDriver b =  null;
    if(browser.equals("Chrome")) {
        System.setProperty("webdriver.chrome.driver", "C:\\chromedriver_win32\\chromedriver.exe");
        b = new ChromeDriver();
    }
    else if (browser.equals("firefox")) {

        b = new FirefoxDriver();
    }
    b.get("http://www.youtube.com/");
    b.findElement(By.xpath("//*[@id='masthead-search-term']")).sendKeys("selenium tutorial for beginner");
    b.findElement(By.xpath("//*[@id='masthead-search-term']")).sendKeys(Keys.RETURN);
    b.switchTo().frame("pyv-iframe"); //youtube search results are in iframe
    //b.findElement(By.linkText("Selenium IDE Demo - Quick Beginner's Tutorial")).click();
    b.findElement(By.xpath("//*[@id='search-results']/li[1]/div[2]/h3/a/span")).click();

运行此代码时,它将返回

Exception in thread "main" org.openqa.selenium.NoSuchElementException: no such element 

在findElement By xpath。请告诉我我错过了什么。请把我当作Selenium的新手。

2 个答案:

答案 0 :(得分:1)

我不确定你为什么说结果在<iframe> ...我没有看到iframe。以下是使用getting started with selenium框架的脚本:

@Config(url="http://youtube.com")
public class YouTubeTest extends AutomationTest {
    @Test
    public void myTest() {
        setText(By.id("masthead-search-term"), "selenium tutorial for beginner")
        .click(By.id("search-btn"))

        // navigate to a search result based on index
        .click(By.cssSelector("ol#search-results > li:nth-child(X) a.yt-uix-tile-link"))
        ;
    }
}
click(By.cssSelector上的

您需要将X值替换为12等。无论您要点击的链接索引是什么。< / p>

(如果您没有使用该框架,您可以轻松翻译代码并提取我使用的选择器)

答案 1 :(得分:0)

我在Selenium IDE的Youtube页面上进行了调查,确实得到了以下结果:

driver = new FirefoxDriver();
baseUrl = "http://www.youtube.com/";
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get(baseUrl + "/results?search_query=selenium&sm=3");
driver.findElement(By.id("masthead-search-term")).clear();
driver.findElement(By.id("masthead-search-term")).sendKeys("selenium");
driver.findElement(By.cssSelector("span.yt-ui-ellipsis-wrapper")).click();

请注意最后一行:这就是我点击第一个搜索结果的地方。在使用网络Developer tools调查Youtube页面后,我意识到这是iframe,但它只包含一些AdSense跟踪代码(我猜)

一般说明:首先尝试使用Selenium IDE进行调查。它让我免于许多关于我的硒代码的噩梦;)