2016-09-21 2 views
2

Я хочу войти в систему по Selenium. Он разделяет процесс на 2 страницы.Как продолжить заполнять данные на следующей странице по selenium?

  • электронной
  • пароль

Теперь я могу ввести ключ в первой странице .Затем я должен идти на следующей странице (входной пароль и нажмите на кнопку отправить ключ).

Однако, если я просто добавить 4 клавишу коды в одном классе, он не может завершить клавишный ввод второй страницы (пароль и отправить)

Я предполагаю некоторый код отсутствует между первой страницей вводом ключа и вводом ключом второй страницей ,

public class Selenium { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 



WebDriver driver; 
System.setProperty("webdriver.gecko.driver", "C:\\Users\\Downloads\\geckodriver-v0.10.0-win64\\wires.exe"); 
driver =new FirefoxDriver(); 


driver.get("https://mail.google.com"); 
driver.findElement(By.id("Email")).sendKeys("yourEmailId");//first page 
driver.findElement(By.id("next")).click();//first page 

driver.findElement(By.id("Passwd")).sendKeys("yourPassword");//next page 
driver.findElement(By.id("signIn")).click();//next page 
} 

driver.get("https://mail.google.com"); 
driver.findElement(By.id("Email")).sendKeys("yourEmailId");//first page 
driver.findElement(By.id("next")).click();//first page 


/* What code should I add here? */ 


driver.findElement(By.id("Passwd")).sendKeys("yourPassword");//next page 
driver.findElement(By.id("signIn")).click();//next page 
} 
+0

Просто подождите, пока поле пароля станет видимым с помощью условия webdriverwait и видимости ожидаемых условий ... – Grasshopper

+0

u mean'.webdriverwait 'и' .visibility'? – Vito

ответ

1

Попробуйте установить неявное ожидание от, может быть, 10 секунд, прежде чем найти этот элемент, как: -

driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); 
driver.findElement(By.id("Passwd")).sendKeys("yourPassword"); 
driver.findElement(By.id("signIn")).click(); 

Или установить явное ожидание. Явным ожиданиям является код, который вы определяете, чтобы дождаться определенного условия, прежде чем продолжить код. В вашем случае это видимость поля ввода пароля.

WebDriverWait wait = new WebDriverWait(driver, 10); 
WebElement element = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("Passwd"))); 
element.sendKeys("yourPassword"); 

//Now click on sign in button 
driver.findElement(By.id("signIn")).click();//next page 

Пояснение: Причина селен не может найти элемент происходит потому, что id поля ввода пароля изначально Passwd-hidden. После того, как вы нажмете кнопку «Далее», Google сначала проверит введенный адрес электронной почты, а затем отобразит поле ввода пароля (изменив идентификатор от Passwd-hidden до Passwd). Поэтому, когда поле пароля по-прежнему скрыто (т. Е. Google по-прежнему проверяет идентификатор электронной почты), ваш веб-сервер начинает поиск поля ввода пароля с идентификатором Passwd, который по-прежнему скрыт. И, следовательно, вам следует подождать, пока он станет видимым.

+0

Для неявного ожидания я добавляю до 30 секунд. Иногда это работает, а когда-то не работает. – Vito

+0

Для явного ожидания 'WebElement element = wait.until (ExpectedConditions.visibilityOfElementLocated (By.id (« Passwd »))) sendKeys (« yourPassword »);' несовместимые типы: void не может быть преобразован в WebEelment – Vito

+0

@Vito Ah , извините, это просто ошибка опечатки, обновите его. Попробуйте сейчас и дайте мне знать .. –

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