2013-05-02 144 views
0

我正在Thomson Holidays網站(http://www.thomson.co.uk/holidays.html)上進行示例任務。在左側有一個假日搜索面板。我無法識別WebDriver中的這些元素。但是,在IDE中,這些元素被識別。需要更多的信息,因爲這是我第一次遇到這樣的問題。以下是代碼示例:Selenium - 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); 

回答

5

因爲它們在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(); 
+0

非常感謝!這工作正常。 – Chetan 2013-05-02 08:44:59

+0

工程像魅力..可能我已經花了100小時在這個問題..因爲我能夠在IDE中找到id,但不是通過Python腳本中的find_element_by_id ..這似乎沒有提及任何地方的文檔。但一個非常有用的提示,並明確定義IDE和Python腳本之間的區別..非常感謝:) – UberNeo 2013-12-17 03:00:53

+0

@UberNeo:不用擔心。如果人們仔細檢查DOM,他們會考慮引起問題的幀的可能性,然後一點點搜索就會告訴所有人。 IDE使事情混亂。 – 2013-12-17 03:11:23

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();