我刚尝试打开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的新手。
答案 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
值替换为1
,2
等。无论您要点击的链接索引是什么。< / 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进行调查。它让我免于许多关于我的硒代码的噩梦;)