Ошибка драйвера не может быть решена, в то время как WebDriver определен вне публичной статической void main () из другой функции через Selenium и Java - PullRequest
0 голосов
/ 21 декабря 2018

Я использую Selenium через Eclipse, используя Java.У меня есть несколько частей кода, которые я хочу сократить с помощью функции.Однако драйвер объявлен в общедоступном статическом void main. Когда я пытаюсь использовать следующий код, он говорит: «драйвер не может быть разрешен».Как я могу это исправить?

    public void TypeinField(String xpath, String value) {
    String val = value; 
    WebElement element = driver.findElement(By.xpath(xpath));
    element.clear();

    for (int i = 0; i < val.length(); i++){
        char c = val.charAt(i);
        String s = new StringBuilder().append(c).toString();
        element.sendKeys(s);
    }       
}

Ответы [ 3 ]

0 голосов
/ 21 декабря 2018

Когда вы работаете с Selenium и Eclipse , используя Java и имея несколько функций, вам нужно учитывать несколько фактов, как показано ниже:

  • Необъявите экземпляр WebDriver , т.е. драйвер в public static void main().Вместо этого объявите драйвер как глобальную и статическую переменную внутри класса, чтобы к ней можно было получить доступ из всех функций.
  • Во время созданияфункции, объявите их static.
  • Вот эффективный протокол, следуя вышеупомянутой логике:

    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.chrome.ChromeDriver;
    
    public class main_with_function {
    
        static WebDriver driver;
        public static void main(String[] args) {
    
            System.setProperty("webdriver.chrome.driver", "C:\\Utility\\BrowserDrivers\\chromedriver.exe");
            driver = new ChromeDriver();
            driver.get("http://www.google.com/");
            print_title("q");
            driver.quit();
        }   
    
        public static void print_title(String value)
        {
            driver.findElement(By.name(value)).sendKeys("duvadefet");
        }
    }
    
0 голосов
/ 21 декабря 2018

Deban,

Вы используете «драйвер» в методе - но вы не передали драйвер методу новой функции.

В вашей новой функции - добавьте параметр драйвера и используйте его.Это будет работать

public void TypeinField(String xpath, String value, WebDriver driver) {
String val = value; 
WebElement element = driver.findElement(By.xpath(xpath));
element.clear();

for (int i = 0; i < val.length(); i++){
    char c = val.charAt(i);
    String s = new StringBuilder().append(c).toString();
    element.sendKeys(s);
}       

}

0 голосов
/ 21 декабря 2018

Подождите, я понял это, мой плохой.Я не нашел достаточно сложного в стеке потока.

В соответствии с этим «драйвер не может быть разрешен» - Selenium Java TestNG

«Определить драйвер WebDriver на уровне класса» ИтакЯ собираюсь сделать это вне публичной статической пустоты main.

Редактировать: Мне все еще нужна помощь, пожалуйста!Определение драйвера на уровне класса устраняет ошибку, но теперь я не могу заставить работать такие команды, как «найти элемент» или «отправить ключи».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...