2017-09-16 220 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": "" 
    } 
    ] 
}