Selenium - WebDriver无法识别元素,但IDE识别相同的元素

时间:2013-05-02 07:05:55

标签: java selenium webdriver selenium-ide

我正在Thomson Holidays网站(http://www.thomson.co.uk/holidays.html)上进行示例作业。在左侧有一个假日搜索面板。我无法识别WebDriver中的任何这些元素。但是,在IDE中,这些元素是可识别的。需要更多信息,因为这是我第一次遇到这样的问题。以下是代码示例:

WebDriver driver = new FirefoxDriver();     
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get("http://www.thomson.co.uk/holidays.html");

driver.findElement(By.id("searchbutton")).click();


driver.findElement(By.id("holidayAttribute_1")).click();
driver.findElement(By.id("holidayAttribute_2")).click();
driver.findElement(By.id("holidayAttribute_3")).click();

Thread.sleep(5000);

2 个答案:

答案 0 :(得分:6)

因为它们位于iframe中,所以您需要先切换到iframe。

现有代码中添加了两行,如下所示:

WebDriver driver = new FirefoxDriver();     
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
driver.get("http://www.thomson.co.uk/holidays.html");

// optional, unnecessary in your case
// driver.switchTo().defaultContent(); // make sure outside of all iframes

// switch to search frame
WebElement searchFrame = driver.findElement(By.cssSelector("iframe[src='/thomson/page/byo/search/usp.page']"));
driver.switchTo().frame(searchFrame);

driver.findElement(By.id("searchbutton")).click();
driver.findElement(By.id("holidayAttribute_1")).click();
driver.findElement(By.id("holidayAttribute_2")).click();
driver.findElement(By.id("holidayAttribute_3")).click();

答案 1 :(得分:0)

搜索面板位于iframe内。由于iframe是第一个iframe,您可以使用以下代码。

    driver.get("http://www.thomson.co.uk/holidays.html");

    // switch to search frame
    driver.switchTo().frame(0);

    driver.findElement(By.id("searchbutton")).click();
    driver.findElement(By.id("holidayAttribute_1")).click();
    driver.findElement(By.id("holidayAttribute_2")).click();
    driver.findElement(By.id("holidayAttribute_3")).click();