2017-02-15 22 views
0

Это еще один вопрос о Селене и щелчке. Я боролся около двух дней и не могу заставить его работать - я пробовал ответы в Интернете, и теперь мне нужны согласованные усилия. Заранее спасибо!!Проблема с селеной, Java, скриншотами и кнопками с кнопками

Я работаю на следующем сайте http://144.76.109.38/peTEST - это может помочь, если вы хотите повторить мои шаги.

Я пытаюсь заполнить форму для входа, а затем нажмите «Войти» и просмотрите страницу ответов.

Вот мой код:

import java.io.File; 
import java.io.BufferedWriter; 
import java.io.FileWriter; 
import java.io.Writer; 
import java.io.IOException; 
import org.apache.commons.io.FileUtils; 
import org.openqa.selenium.By; 
import org.openqa.selenium.Keys; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.OutputType; 
import org.openqa.selenium.TakesScreenshot; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.support.ui.ExpectedCondition; 
import org.openqa.selenium.support.ui.WebDriverWait; 
import org.openqa.selenium.support.ui.Select; 
public class toJava { 
     public static void main(String[] args) { 
       System.setProperty("webdriver.gecko.driver","/home/tallen/RTI/lib/geckodriver/geckodriver"); 
       WebDriver driver = new FirefoxDriver(); 
       driver.get("http:144.76.109.38/peTEST"); 
       File SF2 = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 
       try{ 
        FileUtils.copyFile(SF2, new File("./out-004.png")); 
       }catch(IOException ioe){ 
         System.out.println("There was an IO error"); 
       } 
       driver.findElement(By.id("user_login_name")).click(); 
       WebElement WE4 = driver.findElement(By.id("user_login_name")); 
       WE4.sendKeys("Superuser"); 
       driver.findElement(By.id("user_password")).click(); 
       WebElement WE6 = driver.findElement(By.id("user_password")); 
       WE6.sendKeys("Jkerouac1!"); 
       WebElement WE7 = driver.findElement(By.xpath(".//*[@type='button'][@onclick='login()'][@value='Login']")); 
       WE7.sendKeys(Keys.ENTER); 
       File SF8 = ((TakesScreenshot)driver).getScreenshotAs(OutputType.FILE); 
       try{ 
         FileUtils.copyFile(SF8, new File("./out-005.png")); 
       }catch(IOException ioe){ 
         System.out.println("There was an IO error"); 
       } 
       driver.quit(); 
     } 
} 

Поэтому в основном я открывая страницу, сделав скриншот ввода имени пользователя и пароля, нажав Логин, а затем с другой снимок.

Компиляция и прогон на этом являются чистыми - это не исключение и никаких проблем. Я даже получаю два скриншота. На первом снимке экрана отображается страница входа - без ввода данных. На втором скриншоте отображается заполненная страница входа в систему, кнопка, которую я хочу щелкнуть, но не «приветственная страница», которую вы получите, если вы успешно войдете в систему. На скриншоте показана отмеченная кнопка, я знаю, что нашел элемент , Я даю информацию для входа в скрипт, если вы хотите попробовать сначала с Selenium.

Почему кнопка входа в систему не нажата. Я попытался щелкнуть, выполнить и т. Д. Безрезультатно. Я даже попытался вставить неявные ожидания - все равно ничего.

Я пробовал использовать расширенные способы взаимодействия - и все равно ничего.

Я довольно новичок в Selenium и Java, и я надеюсь, что это просто что-то глупое, что я пропускаю. Но, просмотрев через Интернет, решения там просто не помогают.

Я работаю на Debian-70-свистящие 64-LAMP

Моего Селен Библиотека от клиента комбинированного 3.0.1-nodeps.jar

Моего Geckodriver является v0.11.1-linux64

Спасибо за помощь !!!

+0

Предполагая, что инструкция для нажатия кнопки входа в систему - это 'WE7.sendKeys (Keys.ENTER)', почему вы отправляете клавишу Enter на кнопку вместо вызова 'click()' на ней так же, как и с ' user_login_name' и 'user_password'? Я не обязательно говорю, что это неправильно (я не знаю, и я не проверял), но вместо этого я просто 'click()' it. Кроме того, почему вы вызываете 'click()' в полях 'user_login_name' и' user_password'? Просто 'sendKeys' им. – SantiBailors

+0

Hi SantiBailors - это всего лишь эволюция. Я попытался щелкнуть(), и это не сработало. Я видел этот намек, размещенный в другом месте в сети, и поэтому я попробовал его. Он работает - то есть, он не создает никаких проблем, но снимок экрана по-прежнему неверен, что означает, что щелчок не занял. Благодаря!!! –

ответ

1

Привет,
Я не знаю, может ли это вызвать проблему, но в любом случае для кнопки входа я использовал бы

WE7.click();
. Я просто думаю, что легче понять, что вы пытаетесь сделать с элементом.

Я некоторое время работаю с GeckoDriver и беседую с некоторыми опытными людьми в этом районе, и они сказали мне, что у Gecko есть много проблем, которые еще не исправлены.
Они всегда рекомендовали мне не использовать GeckoDriver, потому что он, кажется, терпел неудачу очень часто и велел мне использовать FirefoxDriver.
Чтобы попробовать это, и это важно, вам просто нужно продолжать работать со старой версией Firefox как версии 46, совместимой с FirefoxDriver (эта версия работала для меня, и вы можете скачать ее из таких мест, как this) и не используйте GeckoDriver. Также версия 47 работает с FirefoxDriver, как я уже нашел here.
Помните: когда вы устанавливаете одну из этих предыдущих версий Firefox, не забудьте перейти к настройкам и отключить автоматические обновления и обновления фона, потому что если вы этого не сделаете, вы скоро закончите с последними версия, требующая GeckoDriver.

Кроме того, вы можете попробовать некоторые проверки, как следующее:

if(WE7.isDisplayed() && WE7.isEnabled()){ 
    WE7.click(); 
} 

Этот вид валидаций поможет в случае, если страница не полностью загружен в тот момент, когда вы пытаетесь взять действие над веб-элементом. Если элемент не готов, вы нажмете его без ошибок, но он просто не будет работать.

Надеюсь, это сработает и для вас!

+1

Исправлено, спасибо! – ferpel

+0

Эй, спасибо. Я собираюсь попробовать это. Мне нужно некоторое время, чтобы попробовать это - вернусь к вам всем как можно быстрее с результатом. –

+0

Добро пожаловать! Не торопитесь! – ferpel