Java Selenium WebDriver使用三个框架。无法定位元素

Java Selenium WebDriver使用三个框架。无法定位元素,java,selenium,webdriver,selenium-webdriver,Java,Selenium,Webdriver,Selenium Webdriver,我对Selenium Webdriver很陌生。我正在尝试自动化一个网页,我面临两个问题。我无法单击框架中的搜索按钮。下面是我的代码 WebDriverWait wait = new WebDriverWait(driver,120,1000); wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("frameview")); wait.until(ExpectedConditions.fr

我对Selenium Webdriver很陌生。我正在尝试自动化一个网页,我面临两个问题。我无法单击框架中的搜索按钮。下面是我的代码

     WebDriverWait wait = new WebDriverWait(driver,120,1000);

     wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("frameview"));

     wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("epilowerframe"));

     wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("productSearchIframe"));

     driver.switchTo().frame("frameview")
     .switchTo().frame("epilowerframe")
     .switchTo().frame("productSearchIframe");

    driver.findElement(By.id("styleSearchForm:goBtn")).click(); 
StylesearchForm:goBtn位于productsearchIframe内

我总是会遇到这样的错误:

等待帧可用120秒后超时:epilowerframe 构建信息:版本:“2.31.0”,修订版:“1bd294d”,时间:“2013-02-27 20:53:56” 系统信息:os.name:'windows7',os.arch:'amd64',os.version:'6.1',java.version:'1.6.0! 驱动程序信息:驱动程序。版本:未知 位于org.openqa.selenium.support.ui.FluentWait.timeoutException(FluentWait.java:259) 位于org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:228) 在Nike_Demo.main(Nike_Demo.java:59)


非常感谢你的帮助

这通常不是问题所在,但有时,根据应用程序的不同,您可能切换帧太快。每次调用.switchTo()后都应该暂停1-2秒,以进入新帧。这将使浏览器驱动程序有时间在执行另一个switchTo()之前加载新DOM。而且,似乎您要切换到每一帧两次;不确定您是否注意到。

FrameToBeavailable和SwitchToIt已将驱动程序切换到该帧。 您不需要执行以下操作:

 driver.switchTo().frame("frameview")
 driver.switchTo().frame("epilowerframe")
 driver.switchTo().frame("productSearchIframe");
只需使用代码:

 WebDriverWait wait = new WebDriverWait(driver,120,1000);

 wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("frameview"));
 wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("epilowerframe"));
 wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("productSearchIframe"));

 driver.findElement(By.id("styleSearchForm:goBtn")).click(); 

也许您可以尝试通过xpath单击?只是为了确定-您确定帧是嵌套的吗?如果它们是嵌套的,您就可以了,djangofan的答案可能适用于您。如果不是,你就错了。