2013-05-02 145 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();