2

我对 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 : 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.6.0_33' 驱动程序信息: driver.version: org.openqa.selenium.support.ui 未知。 FluentWait.timeoutException(FluentWait.java:259) at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:228) at Nike_Demo.main(Nike_Demo.java:59)

非常感谢您的帮助。

4

2 回答 2

2

frameToBeAvailableAndSwitchToIt 已经将驱动程序切换到框架。你不需要这样做:

 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(); 
于 2013-12-11T13:26:12.503 回答
1

这不是经常出现的问题,但有时,根据应用程序,您可能会过快地切换帧。每次调用 .switchTo() 以进入新帧后,您应该暂停 1-2 秒。这将使浏览器驱动程序有时间在您执行另一个 switchTo() 之前加载新的 DOM。此外,您似乎要切换到每个帧两次;不知道你是否注意到了。

于 2013-07-03T14:54:38.213 回答