Получение ошибки: org.openqa.selenium.WebDriverException: неизвестная ошибка: ключи должны быть строкой - PullRequest
0 голосов
/ 30 июня 2018

Я получаю сообщение об ошибке доступа к данным из файла свойств в моем пользовательском интерфейсе selenium: как это можно решить?

org.openqa.selenium.WebDriverException: unknown error: keys should be a string.

У меня есть следующие рамки. Я сделал это для себя для легкости, похоже, усложняю себя. Если есть хорошие идеи, чтобы улучшить его, пожалуйста, предложите Ценю все предложения.

Framework содержит следующее:
1. файл свойств конфигурации
2. класс коммунальных услуг
3. Файл класса определения элементов страницы
4. файл класса многократно используемых функций
5. тестовые занятия

Файл

config.properties имеет следующее содержимое:

url=http://some.com
Email=someuser
Password=somepassword

Утилиты класса (BrowserCalls) следующий код:

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

public class BrowserCalls {

    public WebDriver driver;
    public Properties configs = new Properties();
    public String pathToProperties = "path to config.properties file";

    public void invokeChromeBrowser() throws IOException {

        FileInputStream input = new FileInputStream(pathToProperties);
        pmsConfigs.load(input);
        System.setProperty("webdriver.chrome.driver", configs.getProperty("chromepath"));
        driver = new ChromeDriver();
        getAndMazimize();

    }

    private void getAndMazimize(){

        driver.get(configs.getProperty("url"));
        driver.manage().window().maximize();

    }


    public void closeChromeBrowser(){

        if(driver != null){

            driver.close();
        }

    }


}

Файл класса определения элементов страницы имеет следующий код:

import org.openqa.selenium.By;

public class LoginPageElements {


    //Login page elements
    public static By element1 = By.xpath("/html/head/link[1]");
    public static By username = By.xpath("//*[@id=\"login\"]/input/tr1/td1");
    public static By password = By.xpath("//*[@id=\"login\"]/input/tr2/td1");
    public static By submitButton = By.xpath("//*[@id=\"login\"]/input/tr3/td2/button");
    public static By title = By.xpath("/html/head/title");

}

Классы определения функциональности, вызываемые классами тестовых примеров:

import com.automation.PageElements.LoginPageElements;
import com.automation.ReusableFunctions.BrowserCalls;

public class LoginFeature extends BrowserCalls {

    public void userLogin(){

        driver.findElement(LoginPageElements.element1);
        driver.findElement(LoginPageElements.username).sendKeys(configs.getProperty(Email));
        driver.findElement(LoginPageElements.password).sendKeys(configs.getProperty(Password));
        driver.findElement(LoginPageElements.submitButton).click();

    }

}

Класс теста ниже:

import com.automation.ReusableFunctions.BrowserCalls;
import com.automation.Components.LoginFeature;
import org.testng.annotations.Test;

import java.io.IOException;

public class LoginTestCase1 extends BrowserCalls {

    @Test (description = "Verify application login")
    public void LoginTest() throws IOException {

        LoginFeature login = new LoginFeature();
        login.invokeChromeBrowser();
        login.userLogin();
        login.closeChromeBrowser();

    }

}

Ответы [ 4 ]

0 голосов
/ 29 апреля 2019

Не сохраняйте таблицу Excel со значком Excel на листе Excel. Сохраните лист Excel с помощью кнопки в Eclipse. Пожалуйста, проверьте ссылку на изображение, приведенную ниже: - введите описание изображения здесь

0 голосов
/ 30 июня 2018

Измените эти две строки на:

driver.findElement(LoginPageElements.username).sendKeys(configs.getProperty(Email))
driver.findElement(LoginPageElements.password).sendKeys(configs.getProperty(Password)); 

Кому:

driver.findElement(LoginPageElements.username).sendKeys(configs.getProperty("username"))  
driver.findElement(LoginPageElements.password).sendKeys(configs.getProperty("password"));  

Теперь поговорим о предложении часть:

В этом классе есть серьезная проблема: LoginPageElements , и это из-за абсолютного xpath .

Например: Вы используете этот xpath: //*[@id=\"login\"]/input/tr3/td2/button, чтобы нажать кнопку submit .

Хорошая альтернатива предлагает вам использовать относительный xpath что-то вроде:

//button[text()='Submit']  // This may not work cause you have not shared the HTML for the submit button. Here I am just guessing.

другая альтернатива будет заключаться в следующем: sendKeys (Keys.RETURN) , если и только если приложение поддерживает нажатие на , введите после предоставления username и password Примерно так в коде:

driver.findElement(LoginPageElements.password).sendKeys(configs.getProperty("password"+Keys.RETURN));

Хотя, как предлагает @ Andrei , если вы сильно зависите от входа в систему в качестве метода тестирования, вам следует написать относительный xpath или любой другой локатор для кнопки отправки вместо Keys.RETURN.

Все ваши xpath являются абсолютными, попробуйте написать локаторы, как в следующем порядке:

  1. ID
  2. имя_класс
  3. LinkText
  4. partialLinkText
  5. тэгу
  6. css селектор
  7. xpath (попытаться быть более относительным, чем абсолютным)
0 голосов
/ 02 июля 2018

Некоторое время назад у меня были проблемы с файлом свойств, проблема была с разделителями строк, когда я открывал файл свойств с помощью Notepad ++ все выглядело нормально, но разделители строк отсутствовали, когда файл открывался с помощью Блокнот . Возможно, это поможет

0 голосов
/ 30 июня 2018

Вы можете проверить, что эти два оператора возвращают, как это:

System.out.println(System.getProperty("Email"));
System.out.println(System.getProperty("Password"));

вероятно, они возвращают null, и именно поэтому вы получаете ошибку.

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

public void userLogin(){
        System.out.println(System.getProperty("Email")); // check statement return
        System.out.println(System.getProperty("Password")); // check statement return

        driver.findElement(LoginPageElements.element1);
        driver.findElement(LoginPageElements.username).sendKeys(configs.getProperty("Email"));
        driver.findElement(LoginPageElements.password).sendKeys(configs.getProperty("Password"));
        driver.findElement(LoginPageElements.submitButton).click();

    }

PS

System.getProperty("key") // should be like this
System.getProperty(key) // not like this
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...