尝试使用java中的selenium webdriver自动化gmail注册页面

时间:2017-04-20 16:43:20

标签: selenium-webdriver

这是我走了多远。但是,我很难自动化下拉菜单中的文本。我试图使用select语句自动化,但没有成功。我在facebook注册页面自动化时使用了select,它运行良好。以下是我在流程中使用的代码

    package signUp;

    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;
    import org.openqa.selenium.safari.SafariDriver;
    import org.openqa.selenium.support.ui.Select;
    import org.testng.annotations.Test;

import java.util.List;

/**
 * Created by san on 4/18/17.
 */
public class LoginCredintials {

    @Test


    public void GoogleSignup(){

        System.setProperty("webdriver.gecko.driver", "/Users/abc/Downloads/geckodriver");
        WebDriver driver = new FirefoxDriver();
        String baseUrl = "https://accounts.google.com/SignUp?service=mail&continue=https%3A%2F%2Fmail.google.com%2Fmail%2F&ltmpl=default";
        driver.get(baseUrl);

        //By ID Text area1
        WebElement text1 = driver.findElement(By.id("FirstName"));
        text1.clear();
        text1.sendKeys("San ");

        WebElement text2 = driver.findElement(By.id("LastName"));
        text2.clear();
        text2.sendKeys("P");

        WebElement text3 = driver.findElement(By.xpath(".//*[@id='GmailAddress']"));
        text3.clear();
        text3.sendKeys("s20077");

        WebElement text4 = driver.findElement(By.xpath(".//*[@id='Passwd']"));
        text4.clear();
        text4.sendKeys("123abcdxy");

        WebElement text5 = driver.findElement(By.xpath(".//*[@id='PasswdAgain']"));
        text5.clear();
        text5.sendKeys("123abcdxy");

        WebElement text6 = driver.findElement(By.id("BirthDay"));
        text6.clear();
        text6.sendKeys("1");

        WebElement text7 = driver.findElement(By.id("BirthYear"));
        text7.clear();
        text7.sendKeys("2000");

        WebElement text8 = driver.findElement(By.id("RecoveryPhoneNumber"));
        text8.clear();
        text8.sendKeys("9222103436");

        WebElement text9 =  driver.findElement(By.id("RecoveryEmailAddress"));
        text9.clear();
        text9.sendKeys("abc_gh@yahoo.com");


        Select droplist1 = new Select(driver.findElement(By.id("gender")));
        droplist1.selectByVisibleText("Male");

        Select droplist2 = new Select(driver.findElement(By.id("BirthMonth")));
        droplist2.selectByVisibleText("March");

        Select droplist3 = new Select(driver.findElement(By.xpath(".//*[@id='CountryCode']/div")));
        droplist3.selectByVisibleText("United States");

        WebElement text10 = driver.findElement(By.id("submitbutton"));
        text10.click();

    }
}

3 个答案:

答案 0 :(得分:0)

您必须编写一个自定义方法来从所需的下拉列表中选择值,因为它们不是标准的选择组件。因此,您需要先单击下拉列表并等待选项出现。一旦选项可见,您可以单击所需选项。我写了一个通用方法' googleSelect'为此目的:

package signUp;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.ExpectedConditions;
import org.openqa.selenium.support.ui.WebDriverWait;
import org.testng.annotations.Test;



/**
* Created by san on 4/18/17.
*/
public class LoginCredintials {

    static WebDriver driver = null;

    @Test
    public void GoogleSignup(){

    System.setProperty("webdriver.gecko.driver", "/Users/abc/Downloads/geckodriver");

   driver = new FirefoxDriver();
    String baseUrl = "https://accounts.google.com/SignUp?service=mail&continue=https%3A%2F%2Fmail.google.com%2Fmail%2F&ltmpl=default";
    driver.get(baseUrl);

    //By ID Text area1
    WebElement text1 = driver.findElement(By.id("FirstName"));
    text1.clear();
    text1.sendKeys("San ");

    WebElement text2 = driver.findElement(By.id("LastName"));
    text2.clear();
    text2.sendKeys("P");

    WebElement text3 = driver.findElement(By.xpath(".//*[@id='GmailAddress']"));
    text3.clear();
    text3.sendKeys("s20077444");

    WebElement text4 = driver.findElement(By.xpath(".//*[@id='Passwd']"));
    text4.clear();
    text4.sendKeys("123abcdxy");

    WebElement text5 = driver.findElement(By.xpath(".//*[@id='PasswdAgain']"));
    text5.clear();
    text5.sendKeys("123abcdxy");

    WebElement text6 = driver.findElement(By.id("BirthDay"));
    text6.clear();
    text6.sendKeys("1");

    WebElement text7 = driver.findElement(By.id("BirthYear"));
    text7.clear();
    text7.sendKeys("2000");

    WebElement text8 = driver.findElement(By.id("RecoveryPhoneNumber"));
    text8.clear();
    text8.sendKeys("9222103436");

    WebElement text9 =  driver.findElement(By.id("RecoveryEmailAddress"));
    text9.clear();
    text9.sendKeys("abc_gh@yahoo.com");


    googleSelect(By.id("Gender"), "Male");

    googleSelect(By.id("BirthMonth"), "March");

    googleSelect(By.xpath(".//*[@id='CountryCode']/div"), "United States");

    WebElement text10 = driver.findElement(By.id("submitbutton"));
    text10.click();

    driver.quit();

 }


 private static void googleSelect(By by, String text) {
    driver.findElement(by).click();

    WebDriverWait wait = new WebDriverWait(driver, 10);
    wait.until(ExpectedConditions.visibilityOf(
            driver.findElement(By.xpath("//div[@class='goog-menu goog-menu-vertical']//div[text()='" + text + "']"))));
    driver.findElement(By.xpath("//div[@class='goog-menu goog-menu-vertical']//div[text()='" + text + "']")).click();

  }
}

尝试上面的代码并告诉我,如果它适合您。

答案 1 :(得分:0)

检查页面的html端。有时复选框被写为链接。因此,您必须先单击下拉列表,然后单击您必须选择的元素。我可能不对,但如果可以,请检查。

答案 2 :(得分:0)

刚看到注册页面。看起来它构成了div和li元素所以选择赢了工作。我还看到将值设置到隐藏字段中,例如" HiddenGender"," HiddenBirthMonth"。尝试开发人员工具检查chrome上的元素以获取所需的字段,并直接将值设置为这些隐藏元素。希望这会有所帮助。