2017-09-16 64 views
0

我試圖自動化gmail登錄頁面。 下面的步驟是要進行自動化: 步驟1.訪問Google.com 步驟2.搜索Gmail的 第3步:點擊Gmail中 步驟4.驗證你在Gmail網站 第5步:輸入用戶名 步驟6.單擊Next 步驟7.輸入密碼 步驟8.點擊登錄 第9步:確認你上撰寫按鈕Gmail登錄自動化代碼卡在電子郵件字段

新 頁步驟10.Click但代碼卡上的電子郵件字段。光標在電子郵件字段上閃爍。

下面是代碼:

package com.google.mail; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.ie.InternetExplorerDriver; 

public class OpenGmail { 

    public static void main(String[] args) { 

     WebDriver driver = new InternetExplorerDriver(); 
     System.setProperty("webdriver.ie.driver", "C:\\Users\\Chandra\\Desktop\\SELENIUM\\IEDriver\\IEDriverServer.exe"); 
     driver.get("www.google.com"); 
     driver.findElement(By.xpath("//*[@id='gbw']/div/div/div[1]/div[1]/a")).click(); 
     driver.findElement(By.xpath("/html/body/nav/div/a[2]")).click(); 
     driver.findElement(By.xpath("//*[@id='initialView']/div[1]")); 
     System.out.println(driver.findElement(By.id("headingText"))); 
     System.out.println(driver.findElement(By.id("headingSubtext"))); 
     driver.findElement(By.id("identifierId")).sendKeys("xxxxxkmr51"); 
     driver.findElement(By.className("RveJvd snByac")).click(); 
     driver.findElement(By.className("whsOnd zHQkBf")).sendKeys("xxxxxxxxxxxxxx"); 
     driver.findElement(By.className("RveJvd snByac")).click(); 
     System.out.println(driver.getTitle()); 
     driver.findElement(By.xpath("//*[@id=':j3']/div/div")).click(); 
     } 
} 

這裏是錯誤代碼:

Exception in thread "main" org.openqa.selenium.NoSuchElementException: Unable to find element with xpath == //*[@id='initialView']/div[2] 
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html 
Build info: version: '3.5.3', revision: 'a88d25fe6b', time: '2017-08-29T12:54:15.039Z' 
System info: host: 'CXxXXXX-PC', ip: '192.168.1.10', os.name: 'Windows 10', os.arch: 'amd64', os.version: '10.0', java.version: '1.8.0_144' 
Driver info: org.openqa.selenium.ie.InternetExplorerDriver 
Capabilities [{acceptInsecureCerts=false, browserVersion=11, se:ieOptions={nativeEvents=true, browserAttachTimeout=0, ie.ensureCleanSession=false, elementScrollBehavior=0, enablePersistentHover=true, ie.browserCommandLineSwitches=, ie.forceCreateProcessApi=false, requireWindowFocus=false, initialBrowserUrl=http://localhost:10057/, ignoreZoomSetting=false, ie.fileUploadDialogTimeout=3000, ignoreProtectedModeSettings=false}, browserName=internet explorer, pageLoadStrategy=normal, unhandledPromptBehavior=dismiss, javascriptEnabled=true, platformName=XP, setWindowRect=true, platform=XP}] 
Session ID: 99e8cbc9-b603-49b9-8cd2-de4f4a8da7f5 
*** Element info: {Using=xpath, value=//*[@id='initialView']/div[2]} 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.createException(W3CHttpResponseCodec.java:185) 
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:120) 
    at org.openqa.selenium.remote.http.W3CHttpResponseCodec.decode(W3CHttpResponseCodec.java:49) 
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:164) 
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:82) 
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:646) 
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:416) 
    at org.openqa.selenium.remote.RemoteWebDriver.findElementByXPath(RemoteWebDriver.java:518) 
    at org.openqa.selenium.By$ByXPath.findElement(By.java:361) 
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:408) 
    at com.google.mail.OpenGmail.main(OpenGmail.java:16) 

enter image description here

回答

1

這應該爲你工作

,你可以直接去登錄頁面從here ,這將使其更快,避免不必要的步驟

driver.findElement(By.id("identifierId")).sendKeys("xxxxxxxx"); 
driver.findElement(By.id("identifierNext")).click(); 

WebDriverWait wait = new WebDriverWait(driver, 20); 
wait.until(ExpectedConditions.presenceOfElementLocated(By.name("password"))); 
driver.findElement(By.name("password")).sendKeys("xxxxxxxx"); 
driver.findElement(By.id("passwordNext")).click(); 
+0

@ iamsankalp89偉大的答案... – 2017-09-19 02:19:25

+1

你的答案是正確的+10。如果我的回答是正確的請注意 – iamsankalp89

2

根據錯誤代碼,測試這一步驟失敗:

driver.findElement(By.xpath("//*[@id='initialView']/div[1]")); 

請刪除它,我認爲你不需要它。其他應該工作正常。

0

使用此:

driver.get("https://accounts.google.com/") 
driver.findElement(By.id("identifierId")).sendKeys("xxxxx"); 
driver.findElement(By.xpath(".//*[@id='identifierNext']")).click(); 

WebDriverWait waitforPwd= new WebDriverWait(driver, 20); 
waitforPwd.until(ExpectedConditions.presenceOfElementLocated(By.id("password")); 
driver.findElement(By.id("password")).sendKeys("xxxxx"); 
driver.findElement(By.xpath(".//*[@id='passwordNext']")).click(); 
+0

@anjani庫馬爾downvote的任何理由 – iamsankalp89

0
Hi below code should work for you : 


package com.google.mail; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.chrome.ChromeDriver; 
import org.openqa.selenium.chrome.ChromeOptions; 
import org.openqa.selenium.remote.DesiredCapabilities; 

public class Mytestclass { 

    public static void main(String[] args) throws InterruptedException { 

     WebDriver driver; 
     WebDriver driver = new InternetExplorerDriver(); 
     System.setProperty("webdriver.ie.driver","C:\\Users\\Chandra\\Desktop\\SELENIUM\\IEDriver\\IEDriverServer.exe"); 


     driver.get("https://https://accounts.google.com/signin/v2/identifier?"); 
     driver.findElement(By.xpath("//*[@id='identifierId']")).sendKeys("[email protected]"); 
     driver.findElement(By.xpath("//span[.='Next']")).click(); 
     Thread.sleep(2000); 

     driver.findElement(By.xpath("//*[@id='password']/div[1]/div/div[1]/input")).sendKeys("xxxxxxxx"); 
     driver.findElement(By.xpath("//span[.='Next']")).click(); 
     Thread.sleep(4000); 

     System.out.println(driver.getTitle()); 

     } 
} 
1

1 - 我advace你應該使用Firefox的工作。所以,在FF中有一些附加的測試開發。如「硒元素」。它會記錄每個步驟,然後您可以導出到您的代碼。搜索一下。

2-Other add-on is「Selenium Page Object Generator」,你可以找到所有的元素xpath,css,classname。所以,你不會誤認爲任何定位器。搜索一下!

3-你的代碼在main方法中的第6行。你想要什麼? 「driver.findElement(By.xpath(」// * [@ id ='initialView']/div [1]「));」沒有任何操作像點擊,發送密鑰或其他任何東西。你可以這個代碼。

public class GmailTest { 
 
    private WebDriver driver; 
 
    private String baseUrl; 
 
    private boolean acceptNextAlert = true; 
 
    private StringBuffer verificationErrors = new StringBuffer(); 
 

 
    @BeforeClass(alwaysRun = true) 
 
    public void setUp() throws Exception { 
 
     driver = new FirefoxDriver(); 
 
     baseUrl = "https://www.google.com.tr/"; 
 
     driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); 
 
    } 
 

 
    @Test 
 
    public void testGmailscript() throws Exception { 
 
     driver.get(baseUrl); 
 
     driver.findElement(By.id("lst-ib")).clear(); 
 
     driver.findElement(By.id("lst-ib")).sendKeys("gmail"); 
 
     driver.findElement(By.id("lst-ib")).sendKeys(Keys.ENTER); 
 
     Thread.sleep(600); 
 
     driver.findElement(By.xpath("//div[@id='rso']/div/div/div/div/div/h3/a")).click(); 
 
     driver.findElement(By.cssSelector("#identifierId")).clear(); 
 
     driver.findElement(By.cssSelector("#identifierId")).sendKeys("[email protected]"); 
 
     driver.findElement(By.xpath(".//*[@id='identifierNext']/div[2]")).click(); 
 
     Thread.sleep(600); 
 
     driver.findElement(By.xpath(".//*[@id='password']/div[1]/div/div[1]/input")).clear(); 
 
     driver.findElement(By.xpath(".//*[@id='password']/div[1]/div/div[1]/input")).sendKeys("password"); 
 
     driver.findElement(By.xpath(".//*[@id='passwordNext']/div[2]")).click(); 
 
     Thread.sleep(600); 
 
     //control for gmail page is open or not. I used "write e-mail" element for control. 
 
     Assert.assertTrue(driver.findElement(By.xpath("//div[@id=':io']/div/div")).isEnabled(),"Page is not open"); 
 
     System.out.println("Page is open"); 
 
    } 
 

 
    @AfterClass(alwaysRun = true) 
 
    public void tearDown() throws Exception { 
 
     driver.quit(); 
 
     String verificationErrorString = verificationErrors.toString(); 
 
     if (!"".equals(verificationErrorString)) { 
 
      fail(verificationErrorString); 
 
     } 
 
    } 
 

 
    private boolean isElementPresent(By by) { 
 
     try { 
 
      driver.findElement(by); 
 
      return true; 
 
     } catch (NoSuchElementException e) { 
 
      return false; 
 
     } 
 
    } 
 

 
    private boolean isAlertPresent() { 
 
     try { 
 
      driver.switchTo().alert(); 
 
      return true; 
 
     } catch (NoAlertPresentException e) { 
 
      return false; 
 
     } 
 
    } 
 

 
    private String closeAlertAndGetItsText() { 
 
     try { 
 
      Alert alert = driver.switchTo().alert(); 
 
      String alertText = alert.getText(); 
 
      if (acceptNextAlert) { 
 
       alert.accept(); 
 
      } else { 
 
       alert.dismiss(); 
 
      } 
 
      return alertText; 
 
     } finally { 
 
      acceptNextAlert = true; 
 
     } 
 
    } 
 
}

0

這Gmail的登錄腳本運行良好的鉻selenium ide

{ 
    "CreationDate": "2017-9-21", 
    "Commands": [ 
    { 
     "Command": "open", 
     "Target": "https://accounts.google.com/signin/v2/identifier?flowName=GlifWebSignIn&flowEntry=ServiceLogin", 
     "Value": "" 
    }, 
    { 
     "Command": "click", 
     "Target": "id=identifierId", 
     "Value": "" 
    }, 
    { 
     "Command": "type", 
     "Target": "id=identifierId", 
     "Value": "[email protected]" 
    }, 
    { 
     "Command": "click", 
     "Target": "css=span.RveJvd.snByac", 
     "Value": "" 
    }, 
    { 
     "Command": "pause", 
     "Target": "3000", 
     "Value": "" 
    }, 
    { 
     "Command": "type", 
     "Target": "name=password", 
     "Value": "fakepwd!" 
    }, 
    { 
     "Command": "click", 
     "Target": "css=content.CwaK9", 
     "Value": "" 
    } 
    ] 
}