Обновить не работает с использованием sendkeys, Selenium JAVA - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь автоматизировать поиск в Google, нормальные sendkeys работают, но когда я пытаюсь отправить, используя код keys.F5 или ascii, обновление не работает, даже когда попытка перезагрузки местоположения выдает ошибку как «Метод execute_script (String) не определено для типа WebDriver "

Пробовал вместо F5, клавиша F1 также, но безрезультатно

   ` package com.at.sample;
import org.openqa.selenium.Keys;


import java.lang.Thread;


import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.interactions.Actions;
// import org.openqa.selenium.Alert;
import java.util.List;





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

    WebDriver driver;
    System.setProperty("webdriver.chrome.driver","c://chromedriver.exe");
     driver= new ChromeDriver();

//Launch the Application Under Test (AUT)
driver.get("http://google.com");


Actions action = new Actions(driver);
WebElement element = driver.findElement(By.name("q"));

element.sendKeys("test data");
//sends normal keybaord strokes

 // approch 1  driver.findElement(By.xpath("//html")).sendKeys(Keys.F5);


// approch 2.1 WebElement element1 = driver.findElement(By.xpath("//*[@id=\"tsf\"]/div[2]/div[1]/div[2]/div[2]"));
//approch 2.2 element1.sendKeys(Keys.F1);


//  approch 3   driver.findElement(By.xpath("//*[@id=\"gsr\"]")).sendKeys(Keys.F5);

  // driver.execute_script("location.reload(true);");


System.out.println(driver.getTitle());
// working driver.navigate().to(driver.getCurrentUrl());


}
}
`

Существует 4 подхода. Первые 3 не обновят страницу при использовании 4, она показывает ошибку какМетод execute_script (String) не определен для типа WebDriver

Ответы [ 3 ]

0 голосов
/ 30 октября 2019

Вы можете обновить следующими способами:

1.Используя метод get и рекурсивный способ

    driver.get("https://URL.com");
    driver.get(driver.getCurrentURL());

Использование метода Navigate и рекурсивный вызов вашего URL

driver.get("https://URL.com"); driver.navigate.to(driver.getCurrentURL());

Использование одного действительного webelement и отправка ключей

driver.get("https://URL.com"); driver. findElement(By.id("username")).sendKeys(Keys.F5);

Надеюсь, эта помощь.

0 голосов
/ 30 октября 2019

WebElement (I) sendKeys () не принимает клавиши (клавиши клавиатуры). Это может быть обработано только с помощью класса Actions.

Кроме того, если вам нужно обновить страницу, используйте WebDriver () refresh () или получите текущий URL-адрес, используя getCurrentUrl () того же интерфейса, и navigate (), используя тот же URL-адрес. в качестве параметра.

Обновление:

Вот подробное объяснение каждого подхода: 1) Согласно 'https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#sendKeys-java.lang.CharSequence...-', sendKeys () в WebElement (I) принимает только последовательность символов (т.е. строка.). // Approch 1 driver.findElement (By.xpath ("// html")) возвращает WebElement, и этот элемент sendKeys будет принимать только последовательность символов. Следовательно, ваш подход к обновлению r = с использованием Keys.F5 здесь не сработает.

2) // Approch 2.1 WebElement element1 = driver.findElement (By.xpath ("// * [@ id = \"TSF \"] / дел [2] / дел [1] / дел [2] / дел [2] "));// Approch 2.2 element1.sendKeys (Keys.F1);То же объяснение, что и в подходе 1.

3) // Approch 3 driver.findElement (By.xpath ("// * [@ id = \" gsr \ "]")). SendKeys (Keys.F5);Проделал ту же операцию, что и в подходе 1, и там объясняется.

4) Если нам нужно использовать javascriptexecutor, сначала нам нужно создать объект javascriptexecutor, как показано ниже, и вызвать метод execute_script () с использованием ссылочной переменной этого объекта. :

JavascriptExecutor js = (JavascriptExecutor) driver;
js.executeScript (Script, Arguments);

Если вы не создали этот объект, вы получите 'execute_script (String) isundefined для типа WebDriver ', что ожидается.

Следовательно, 4 подхода, которые вы пробовали, не обновят страницу. Вместо этого вы можете использовать следующие параметры:

1) Класс действий sendKeys (): который будет принимать клавиши клавиатуры. 2) использование driver.navigate (). Refresh ();3) Использование javascriptexecutor после создания объекта для него (как описано в подходе 4)

Попробуйте с этим кодом:

import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.chrome.ChromeDriver;

import io.github.bonigarcia.wdm.WebDriverManager;

public class TestRefresh {

    public static void main(String[] args) {

        WebDriverManager.chromedriver().setup();

        WebDriver driver = new ChromeDriver();
        driver.manage().window().maximize();
        driver.get("https://www.google.com");
`//     case 1:`
        `driver.navigate().to(driver.getCurrentUrl());`
`//     case 2:`
        `((JavascriptExecutor)driver).executeScript("document.location.reload()");`
`//     case 3:`
        `driver.navigate().refresh();`
    }

}
0 голосов
/ 29 октября 2019

Пожалуйста, обратитесь к решению ниже

driver.navigate.refresh();

Если вы хотите обновить страницу с помощью клавиш, вы также можете использовать класс Robot.

    Robot robot = new Robot();  // Robot class throws AWT Exception
    Thread.sleep(2000); // Thread.sleep throws InterruptedException
    robot.keyPress(KeyEvent.VK_CONTROL);  // press Control key down key of 
    robot.keyPress(KeyEvent.VK_F5);
    robot.keyRelease(KeyEvent.VK_CONTROL);  
    robot.keyRelease(KeyEvent.VK_F5);
    Thread.sleep(2000); 

Это проблема, связанная с селеном. Более подробная информация доступна здесь: https://github.com/webdriverio/webdriverio/issues/1344

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