使用sendkey不能刷新,Selenium JAVA

时间:2019-10-29 15:11:32

标签: selenium selenium-webdriver selenium-chromedriver

我正在尝试自动执行Google搜索,正常的sendkeys可以正常工作,但是当我尝试使用keys.F5或ascii代码进行发送时,刷新不会起作用  当尝试重新定位时,也会出现错误,因为“ WebDriver类型的execute_script(String)方法未定义     “

也尝试过使用F5键代替F5键,但无济于事

   ` 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个不会刷新pagea  在第4次使用时,显示错误为:对于WebDriver类型,方法execute_script(String)未定义

3 个答案:

答案 0 :(得分:0)

请参考以下解决方案

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

答案 1 :(得分:0)

您可以通过以下方式刷新:

1。使用get方法和递归方法

    driver.get("https://URL.com");
    driver.get(driver.getCurrentURL());
  1. 使用导航方法并递归调用您的URL

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

  2. 使用一个有效的网络元素并发送密钥

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

希望获得帮助。

答案 2 :(得分:0)

WebElement(I)sendKeys()将不接受键(键盘键)。只能使用Actions类来处理。

此外,如果您需要刷新页面,请使用WebDriver()refresh()或使用相同接口的getCurrentUrl()获取当前URL,并使用相同的URL作为参数来导航(

)。

更新:

以下是每种方法的详细说明: 1)按照'https://seleniumhq.github.io/selenium/docs/api/java/org/openqa/selenium/WebElement.html#sendKeys-java.lang.CharSequence...-',WebElement(I)中的sendKeys()仅接受char序列(即字符串)。 //大约1 driver.findElement(By.xpath(“ // html”))返回一个WebElement,此元素sendKeys将仅接受char序列。因此,您的方法r =使用Keys.F5进行刷新在这里行不通。

2)//处理2.1 WebElement element1 = driver.findElement(By.xpath(“ // * [@ id = \” tsf \“] / div [2] / div [1] / div [2] / div [2]“)); //将2.2 element1.sendKeys(Keys.F1); 与方法1相同的解释。

3)//接近3 driver.findElement(By.xpath(“ // * [@ id = \” gsr \“]”))。sendKeys(Keys.F5); 进行了与方法1相同的操作,并在此处进行了说明。

4)如果需要使用javascriptexecutor,首先需要创建如下所示的javascriptexecutor对象,并应使用该对象的引用变量调用execute_script():

JavascriptExecutor js =(JavascriptExecutor)驱动程序;
js.executeScript(Script,Arguments);

如果未创建此对象,则将得到“ WebDriver类型的execute_script(String)未定义”。

因此,您尝试的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();`
    }

}