2015-07-05 2 views
2

Это то, что я пытаюсь сделать в Gmail.Невозможно щелкнуть значок «Настройка» в Gmail с веб-драйвером selenium

  1. www.gmail.com
  2. Войти с помощью действительного пользователя (если не существует создания фиктивного пользователя)
  3. Нажмите Входящие
  4. Нажмите на первое письмо
  5. Нажмите на Compose Email.
  6. Отправляйте письмо на ту же учетную запись электронной почты.
  7. Нажмите на значок настроек в правом верхнем углу
  8. Got на автоответчике о Генеральном закладка Параметры
  9. Выберите автоответчиком положение.

Я могу нажать на 1-е сообщение электронной почты и выбрать адрес электронной почты, а затем нажать на кнопку электронной почты, чтобы отправить электронное письмо. Проблема, с которой я сталкиваюсь, не может нажать на значок настроек. Элемент скрыт, я не могу его щелкнуть. Я попробовал его с помощью customized-Xpath, а также попытался щелкнуть его с помощью координат. Но это не работает для меня. Пожалуйста, помогите мне в этом.

import org.openqa.selenium.By; 
import org.openqa.selenium.Point; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.interactions.Actions; 
import org.openqa.selenium.support.ui.ExpectedConditions; 
import org.openqa.selenium.support.ui.WebDriverWait; 


    public class Gmail1 { 

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

      // Login to browser 
      WebDriver driver= new FirefoxDriver(); 
      driver.get("https://www.gmail.com"); 
      driver.manage().window().maximize(); 
      System.out.println("Browser opned"); 
      driver.findElement(By.xpath("//*[@id='Email']")).sendKeys("Use your UserId"); 
      System.out.println("Entered Email id"); 
      driver.findElement(By.xpath("//*[@id='next']")).click(); 
      System.out.println("Clicked on Next"); 
       Thread.sleep(3000); 
      driver.findElement(By.xpath("//*[@id='Passwd']")).sendKeys("Use your password"); 
      System.out.println("Entered the Password"); 
      driver.findElement(By.xpath("//*[@id='signIn']")).click(); 
      System.out.println("Welcome to gmail"); 
       Thread.sleep(5000); 
      driver.findElement(By.xpath("//*[@id=':3d']")).click(); 
      System.out.println("Clicked on email"); 
       Thread.sleep(3000); 
      String emailid = driver.findElement(By.xpath("//span[@class='go']")).getText(); 
      emailid=emailid.substring(emailid.indexOf("<")+1, emailid.indexOf(">")); 
      System.out.println(emailid); 
      driver.findElement(By.xpath("//*[@id=':it']/div/div")).click(); 
      System.out.println("Clicked on Compose mail"); 
      driver.findElement(By.xpath("//*[@name='to']")).sendKeys(emailid); 
      System.out.println("Entered the TO Email Address"); 
      driver.findElement(By.xpath("//*[@name='subjectbox']")).sendKeys("My Mail"); 
      System.out.println("Entered Subject of the email"); 
      driver.findElement(By.xpath("//*[@role='button' and .='Send']")).click(); 
      System.out.println("Clicked on send button"); 

      clickSetting(driver);  
     } 
    public static void clickSetting(WebDriver driver){ 
      //Tried with Coordinates (doesn't work) 
      Point point = driver.findElement(By.xpath("//div[@class='G-Ni J-J5-Ji'] [@gh ='s']/*[1]")).getLocation(); 
      System.out.println(point.x + "-" + point.y); 
      Actions builder = new Actions(driver); 
      builder.moveByOffset(point.x, point.y).click().build().perform(); //Getting Error. 

      //Tried with Action Class (doesn't work) 
      WebDriverWait wait = new WebDriverWait(driver, 10); 
      WebElement SettingWheel=driver.findElement(By.xpath("//*[@data-tooltip='Settings' and @role='button']")); 
      WebElement SettingsLink=driver.findElement(By.xpath("//*[@role='menuitem']/div[.='Settings']")); 
      wait.until(ExpectedConditions.elementToBeClickable(SettingWheel)); 
      Actions actions = new Actions(driver); 
      actions.moveToElement(SettingWheel).moveToElement(SettingsLink).click().build().perform();//Getting Error. 
      Thread.sleep(2000); 
      System.out.println("Clicked On Setting");   
     } 

Сообщение об ошибке: - «Элемент не видимых в данный момент, и поэтому не может быть взаимодействовали с (ПРЕДУПРЕЖДЕНИЕ: Сервер не предоставляет никакой информации StackTrace)»

Заранее спасибо.

+0

Перейти на другой сайт. Держитесь подальше от google – Saifur

+0

У меня нет возможности попробовать его на другом сайте. Мне нужно сделать это только в gmail. Пожалуйста, помогите мне. –

ответ

1

Попробуйте это: -

public static void clickSetting(WebDriver driver){ 
      List<WebElement> elements=driver.findElements(By.xpath("//div[@gh='s']/*[@role='button']")); 
     for(WebElement element:elements){ 
      if(element.isDisplayed()){ 
       element.click(); 
       Thread.sleep(2000); 
       driver.findElement(By.xpath("//*[@id='ms']")).click(); 
       Thread.sleep(5000); 
      }   
     } 
+0

Спасибо Vishal. Он работает для меня. –

+0

Значок настроек имеет 2 узла, идентифицированных вашим xpath, один из них виден, а другой невидим и оба присутствуют в DOM. Вы пытались щелкнуть невидимый элемент, поскольку он появляется первым; следовательно, вы получали исключение «Элемент в настоящее время не видимо и, возможно, не взаимодействуете ...». Таким образом, над кодом будут отображены оба элемента, идентифицированные вашим xpath, и проверьте, видимо ли это или нет. Если видимый и нажмите. –

0

Проблема с вашим xpath. Я пробовал с id ad, это сработало. Thread.sleep - плохая идея. Не идти с этим и вместо того, чтобы использовать WebDriverWait

В любом случае следующий фрагмент нажмут на шестеренки, то настройки и ждать, пока настройки панели загружены полностью

пойти Также через эту Gmail Selenium и посмотреть, как я перевалено Войти Gmail без Thread.sleep

public static void clickSetting(WebDriver driver) { 
    WebDriverWait wait = new WebDriverWait(driver, 60); 
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@id=':3d']"))).click(); 
    System.out.println("Clicked On Settings Gear"); 
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@role='menuitem']/div[.='Settings']"))).click(); 
    System.out.println("Clicked On Setting"); 
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//*[@class='dt']"))); 
    System.out.println("Settings Visible"); 
} 
+0

Hi Madhan, Спасибо за обмен кода. Я использовал тот же код, вы отправляете его для gmail. Но это не работает для меня. Сообщение об ошибке: - после 60 секунд ожидания видимости элемента, расположенного By.xpath: // * [@ id = ': 3d'] Информация о сборке: версия: '2.41.0 ', версия:' 3192d8a ', время:' 2014-03-27 17:18:15 ' Сценарий, который я пытаюсь, вам нужно открыть 1-е письмо вашего почтового ящика. Затем попробуйте нажать на настройку передач -> настройки. –

+0

@Harikishen Этот код предназначен для Щелчок по настройкам в одиночку. Я ничего не сделал для открытия 1-го адреса электронной почты входящих сообщений – Madhan

+0

Просто для уточнения. Тот же код не будет работать, когда откроется 1-й адрес почтового ящика, и вы пытаетесь нажать на ссылку Настройки. Вы получите ту же ошибку. Это проблема, с которой я столкнулся. –

0

Попробуйте это:

package yourPackageName; 

import java.util.List; 

import org.openqa.selenium.By; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.chrome.ChromeDriver; 

public class TestClass2 { 
static WebDriver driver; 
public static void main(String[] args) { 
    System.setProperty("webdriver.chrome.driver", "c:/chromedriver.exe"); 
    driver = new ChromeDriver(); 
    Step_1_LaunchApp(); 
    Step_2_LoginUsingCredentials(); 
    Step_3_ClickOnInbox(); 
    Step_4_ClickOnFirstEmail(); 
    Step_5_ClickOnComposeEmail(); 
    Step_6_ClickOnSettingsIcon(); 
} 

private static void Step_6_ClickOnSettingsIcon() { 
    try{ 
     driver.findElement(By.xpath("//*[@class='aos T-I-J3 J-J5-Ji']")).click(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 

private static void Step_5_ClickOnComposeEmail() { 
    try{ 
     driver.findElement(By.xpath("//div[contains(text(),'COMPOSE')]")).click(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
} 

private static void Step_4_ClickOnFirstEmail() { 
    try{ 
     driver.findElement(By.xpath("//div[@role='tabpanel'][1]//table//tr[1]")).click(); 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 
    waitTimeInSecond(2); 
} 

private static void Step_3_ClickOnInbox() { 
    driver.findElement(By.xpath("//span/a[contains(text(),'Inbox')]")).click(); 
    waitTimeInSecond(2); 
} 

private static void Step_2_LoginUsingCredentials() { 
    driver.findElement(By.id("Email")).sendKeys("[email protected]"); 
    driver.findElement(By.id("next")).click(); 
    waitTimeInSecond(2); 
    driver.findElement(By.id("Passwd")).sendKeys("Password"); 
    driver.findElement(By.id("signIn")).click(); 
    waitTimeInSecond(5); 
} 

private static void Step_1_LaunchApp() { 
    driver.get("http://gmail.com"); 
} 

public static void waitTimeInSecond(int waitTime){ 
    try{Thread.sleep(waitTime*1000);}catch(Exception e){} 
    } 
} 

.

Сначала введите свои учетные данные и запустите сценарий, нажмите кнопку «Настройки».

Смежные вопросы