2017-04-20 71 views
0

这是我走过的距离。但是,我很难自动执行下拉菜单中的文本。我试图使用select语句自动化,但没有成功。我使用选择自动化Facebook注册页面,它的工作。以下是我的过程尝试使用java中的selenium webdriver自动化gmail注册页面

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("[email protected].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(); 

    } 
} 

回答

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("[email protected]"); 


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

    } 
} 

试试上面的代码,让我知道,如果它适合你。

0

检查页面的html端。有时候复选框会写成链接。所以你必须先点击下拉菜单,然后点击你必须选择的元素。我可能不对,但如果你可以请检查。

0

刚刚看到注册页面。看起来像是由div和li元素组成的,所以Select不起作用。我还看到,隐藏字段中的值被设置为“HiddenGender”,“HiddenBirthMonth”。尝试使用开发人员工具在Chrome上检查元素以获取所需的字段,并直接将值设置为隐藏元素。希望这可以帮助。

相关问题