Selenium webdriver 硒参数化

Selenium webdriver 硒参数化,selenium-webdriver,Selenium Webdriver,我尝试了以下代码来自动化gmail,在第一个函数中,浏览器能够获取元素,直到“撰写”并单击它,但没有找到接下来的几个元素,如“to”、“subject”。我已经在void mailSend()函数中指定了下一个元素,我不确定它为什么不读取下一个元素 public class Example{ public static WebDriver driver; @BeforeClass public void before() { driver = new FirefoxDriver(); }

我尝试了以下代码来自动化gmail,在第一个函数中,浏览器能够获取元素,直到“撰写”并单击它,但没有找到接下来的几个元素,如“to”、“subject”。我已经在void mailSend()函数中指定了下一个元素,我不确定它为什么不读取下一个元素

public class Example{
public static WebDriver driver;

@BeforeClass
public void before()
{

driver = new FirefoxDriver();

}

@Test(dataProvider = "Data-Provider-Function")
public void startup(String uName,String pass) throws Exception
{

    driver.get("https://www.gmail.com");
    driver.findElement(By.id("Email")).sendKeys(uName);
    driver.findElement(By.id("Passwd")).sendKeys(pass);
    driver.findElement(By.id("signIn")).click();
    Thread.sleep(4000);
    driver.findElement(By.cssSelector("div[class='T-I J-J5-Ji T-I-" +
            "KE L3']")).click();
    Thread.sleep(4000);

}


@DataProvider (name = "Data-Provider-Function")
public Object[][] startupProvider() 
{
    return new Object[][]

            {

            {"selva.prokarma.test@gmail.com", "prokarma"}

            };


}

@Test(dataProvider="Mail Information")
public void mailSend(String to,String subject,String body) throws Exception

{
    driver.navigate().refresh();

    Thread.sleep(2000);



    driver.findElement(By.className("vO")).sendKeys(to);    
    Thread.sleep(2000);
    driver.findElement(By.className("aoT")).sendKeys(subject);
    Thread.sleep(2000);     
    driver.findElement(By.cssSelector(".editable")).click();
    driver.switchTo().frame(driver.findElement(By.xpath("//iframe[contains(@tabindex,'1') and contains(@frameborder,'0')]"))); 
    driver.findElement(By.xpath("//body[@role='textbox']")).sendKeys(body);    
    driver.switchTo().defaultContent();       
    driver.findElement(By.cssSelector("div[class='T-I J-J5-Ji aoO T-I-atl L3']")).click();
    Thread.sleep(4000); 
    driver.navigate().refresh();
    Thread.sleep(4000); 
}

@DataProvider (name = "Mail Information")
public Object[][] mailSendProvider() 
{
    return new Object[][]

            {

            {"selva.prokarma.test@gmail.com", "This is a Test Mail","Prokarma"},
            {"selva.prokarma.test@gmail.com", "This is Test Mail 2","Hello Automation King "},
            {"selva.prokarma.test@gmail.com","This is another Test Mail 3","Hello  Selva"},
            {"selva.prokarma.test@gmail.com","This is another Test Mail 3","Hello  SelvaKumar"},
            {"selva.prokarma.test@gmail.com","Hi How are you doing","Robotium Tasks to be followed"}

            };

}

@AfterClass
public void tear()
{
    driver.quit();
}

}

我将等待时间保持为60秒,并删除了所有不需要的sleep语句。此外,我还尝试了各种单一测试方法

public class Example2 {
    public static WebDriver driver;

    @BeforeClass
    public void before()
    {

    driver = new FirefoxDriver();
    driver.manage().timeouts().implicitlyWait(60000, TimeUnit.MILLISECONDS);

    }

    @Test(dataProvider="Mail Information")
    public void mailSend(String to,String subject,String body) throws Exception

    {

        driver.get("https://www.gmail.com");
        driver.findElement(By.id("Email")).sendKeys("xyzy@gmail.com");
        driver.findElement(By.id("Passwd")).sendKeys("*********");
        driver.findElement(By.id("signIn")).click();

        driver.findElement(By.cssSelector("div[class='T-I J-J5-Ji T-I-KE L3']")).click();
        driver.findElement(By.className("vO")).sendKeys(to);    
        driver.findElement(By.className("aoT")).sendKeys(subject);

        driver.findElement(By.cssSelector(".editable")).click();
        driver.switchTo().frame(driver.findElement(By.xpath("//iframe[contains(@tabindex,'1') and contains(@frameborder,'0')]"))); 
        driver.findElement(By.xpath("//body[@role='textbox']")).sendKeys(body);    
        driver.switchTo().defaultContent();       
        driver.findElement(By.cssSelector("div[class='T-I J-J5-Ji aoO T-I-atl L3']")).click();

        driver.navigate().refresh();
    }

    @DataProvider (name = "Mail Information")
    public Object[][] mailSendProvider() 
    {
        return new Object[][]

                {

                {"xyzy@gmail.com", "This is a Test Mail","hello"},
                };

    }

    @AfterClass
    public void tear()
    {
        driver.quit();
    }
附加输出屏幕截图以及。。。

您是否在同一浏览器窗口中的新gmail UI上尝试过它?是的,我只在新gmail上尝试过,直到compose按钮元素都可以找到并单击,但当谈到下一个功能“mailSend”时,它会说“element not found”,我已经为iframe工作并实现过,现在我的疑问是,y元素无法读取第二个函数。。通过安装testngjar和al-u-vilknow/。。如果不使用“数据提供者”,我可以正常运行,并在“撰写邮件”后获取元素。编辑用户名和密码,并尝试一下。你会知道它是什么错误扫描你请附加错误堆栈跟踪,(将b容易指导)顺便说一句,我尝试了相同的代码,它是完美的为我工作…检查我的答案为我使用的代码。。。