使用Selenium Webdriver显示Accordion中的所有可折叠内容

时间:2014-07-13 15:44:02

标签: java selenium selenium-webdriver accordion

假设我想要模拟一个场景,用户希望在两次点击之间(最多2-3秒)逐个查看所有可折叠内容,如Accordion窗口小部件,等待一段时间

用户点击第1部分,然后等待2秒,然后点击第2部分,依此类推。

我想过以这种方式实施

package com.rahul.misc;
import java.util.List;
import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.interactions.Actions;

public class accordion {
public WebDriver driver;
private String baseUrl;

public static void main(String[] args) {
 accordion acc=new accordion();
 acc.checkFirefox();
    // TODO Auto-generated method stub

}
public void checkFirefox(){
driver=new FirefoxDriver();
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);

baseUrl="http://jqueryui.com/accordion/";
driver.get(baseUrl);


List<WebElement> allinks= driver.findElements(By.cssSelector(".ui-accordion-header"));
for(WebElement w:allinks){
    new Actions(driver).click().build().perform();
    try {
        Thread.sleep(3000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

} }

此代码正确编译但不执行任何操作。我对将所有元素列入列表的部分持怀疑态度。这是捕获窗口小部件的所有Web元素的正确方法。如果没有,我该怎么做。

行动也是正确的吗?因为在该场景中,用户不会进入,他只是单击可折叠标题。

1 个答案:

答案 0 :(得分:3)

您的代码没有做任何事情的原因是因为元素包含在iframe中。如果没有找到任何元素,findElements()不会抛出异常,因此您的代码将运行完成。

您可以像这样修复该部分:

baseUrl="http://jqueryui.com/accordion/";
driver.get(baseUrl);
driver.switchTo().frame(driver.findElement(By.cssSelector(".demo-frame")));

iframe完成后,您需要像这样切换回来:

driver.switchTo().defaultContent();

我相信你会在这一行遇到另一个问题:

new Actions(driver).click().build().perform();
click()上下文中的

Actions点击鼠标当前所在的位置。当你没有告诉鼠标指向哪里时,它会在某个地方点击,但不会在你想要的元素上点击。您可以通过几种不同的方式解决这个问题。

我建议这样做:

w.click();

如果你想留在Actions链,你可以这样解决:

new Actions(driver).click(w).build().perform();