2015-05-03 34 views
1

我正在嘗試登錄到我的gmail,編寫一封電子郵件並使用gmail發送它。我已經寫下了下面的代碼,但是在查找COMPOSING按鈕時點擊失敗。硒 - 無法找到Gmail中的COMPOSE按鈕

package Selenium; 
import java.util.concurrent.TimeUnit; 

import org.openqa.selenium.*; 
import org.openqa.selenium.firefox.FirefoxDriver; 

public class Email { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 

     WebDriver driver = new FirefoxDriver(); 
     driver.get("https://www.google.co.in"); 

     driver.manage().timeouts().pageLoadTimeout(20, TimeUnit.SECONDS); 

     driver.findElement(By.xpath("/html/body/div/div[3]/div[1]/div/div/div/div[1]/div[2]/a")).click(); 

     driver.manage().timeouts().pageLoadTimeout(20, TimeUnit.SECONDS); 

     driver.findElement(By.id("Email")).sendKeys("[email protected]"); 
     driver.findElement(By.id("Passwd")).sendKeys("password"); 
     driver.findElement(By.id("signIn")).click(); 

     driver.manage().timeouts().pageLoadTimeout(2, TimeUnit.MINUTES); 
     driver.findElement(By.xpath("//div[contains(text(),'COMPOSE')]")).click(); 

     driver.findElement(By.xpath("/html/body/div[14]/div/div/div/div[1]/div[2]/div[1]/div[1]/div/div/div/div[3]/div/div/div[4]/table/tbody/tr/td[2]/form/div[2]/div")).sendKeys("[email protected]"); 

     driver.findElement(By.id("1ys")).sendKeys("Hello"); 
     driver.findElement(By.id("1zu")).sendKeys("Selenium Email"); 
     driver.findElement(By.id("1yi")).click(); 
    } 
} 

我收到錯誤的(By.xpath("//div[contains(text(),'COMPOSE')]")).click();

我也試圖找到絕對路徑和CSS選擇器也是元。當Gmail仍在加載電子郵件頁面時,此錯誤出現在控制檯中,儘管我已給它等待2分鐘,但當頁面尚未加載時,我可以看到它嘗試執行下一行。

回答

0

您使用的嘗試:

WebElement link = driver.findElement(By.linkText("COMPOSE")); 

只是一個建議:

自動化的Gmail使用基本HTML視圖是很多比使用常規視圖更容易。當您嘗試在常規視圖中撰寫電子郵件時,彈出的小窗口會有一個動態生成的ID。在基本的html視圖中不會出現這種情況。您可以通過啓動以下網址加載基本HTML視圖的Gmail:

https://mail.google.com/mail/u/0/h/s32qz81kdosc/?zy=h&f=1

登錄上述網址後,你可以找到通過撰寫電子郵件中的鏈接:

wait.until(ExpectedConditions.presenceOfElementLocated(By.linkText("Compose Mail"))); 
WebElement lnkComposeMail = driver.findElement(By.linkText("Compose Mail")); 
lnkComposeMail.click();