Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/selenium/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 键盘无法访问元素_Java_Selenium_Selenium Webdriver - Fatal编程技术网

Java 键盘无法访问元素

Java 键盘无法访问元素,java,selenium,selenium-webdriver,Java,Selenium,Selenium Webdriver,我无法在这里上传图像。我得到的错误如下所述。你们中有谁能帮我做这件事吗,因为这件事很重要。 代码是,错误也被提到了 package kemgo_package; import java.io.IOException; import java.net.InetSocketAddress; import java.net.Socket; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.

我无法在这里上传图像。我得到的错误如下所述。你们中有谁能帮我做这件事吗,因为这件事很重要。 代码是,错误也被提到了

package kemgo_package;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.TimeUnit;

import org.omg.SendingContext.RunTime;
//import org.apache.bcel.generic.Select;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.support.ui.Select;

public class kengo_class 
{
public static void main(String[] args) throws Exception 
{

    System.setProperty("webdriver.gecko.driver","E:\\geckodriver-v0.19.1-win64\\geckodriver.exe");
    System.out.println("Hello");
    WebDriver driver= new FirefoxDriver();
    driver.manage().window().maximize();
    Password
    driver.findElement(By.name("login")).click();
    driver.findElement(By.xpath("html/body/div[1]/div/header/div[2]/nav/div/ul[2]/li[3]/a")).click();
    driver.findElement(By.id("userClearBtn")).click();  //Click Auction
    System.out.println("hello world-----2");

     WebElement UploadImg = driver.findElement(By.xpath("/html/body/div[1]/div/div/div/section/div/form/div[1]/div[2]/div[1]/div[1]/label/p[2]")); //Image upload
     UploadImg.sendKeys("C:\\Users\\Rahul\\Desktop\\Buyer_Detail_View.png");  //Select image
    //driver.findElement(By.xpath("/html/body/div[1]/div/div/div/section/div/form/div[1]/div[2]/div[1]/div[1]/label/p[2]")).sendKeys("C:\\Users\\Rahul\\Desktop\\test Images\\1..jpg");  //Clicks on Browse button
    // Runtime.getRuntime().exec("C:\\Users\\Rahul\\Desktop\\AutoIt\\UploadFile.exe");


}
}
错误:-

Exception in thread "main" org.openqa.selenium.ElementNotInteractableException: Element <p class="btn waves-effect waves-light btn-upload"> is not reachable by keyboard

看起来您使用的绝对值有时指的是输入字段,有时指的是按钮。像您这样的xpath注释不是最佳实践。尝试使用相对xpath

/html/body/div[1]/div/div/div/section/div/form/div[1]/div[2]/div[1]/div[1]/label/p[2]

尝试用相对xpath替换它,您的问题就会得到解决。如果您粘贴输入字段的html代码,我可以帮助您。

如果接受输入路径,则可以使用selenium sendkeys直接上载文件,否则必须使用java Robot类上载文件,如下所示

public void uploadFile(WebDriver driver, String path) throws AWTException, InterruptedException {
        Robot robot = new Robot();
        // To click on file upload button
        driver.findElement(By.xpath("//div[@class='row_dv text-center ']//p[text()='Picture Upload']")).click();
        // path is the absolute path of the image ex:
        // image(C:\\Users\\Rahul\\Desktop\\Buyer_Detail_View.png)
        Thread.sleep(5000);
        StringSelection stringSelection = new StringSelection(path);
        Clipboard clipboard = Toolkit.getDefaultToolkit().getSystemClipboard();
        clipboard.setContents(stringSelection, stringSelection);
        robot.keyPress(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_V);
        robot.keyRelease(KeyEvent.VK_V);
        robot.keyRelease(KeyEvent.VK_CONTROL);
        robot.keyPress(KeyEvent.VK_ENTER);
        robot.keyRelease(KeyEvent.VK_ENTER);

    }
希望这能解决您的问题。

如果您的元素

在使用路径内更好。相对路径比绝对路径更好。例如://输入[contains@class,“某些类”]
这对我的案子有效。我曾经//*[contains@class,'some_class']并在中更改为//输入[contains@class,“某个课程”]并且它起了作用。

试着去做。但仍然不起作用。@RAHUL,这不是文本框,你怎么能用sendkeys来实现呢?你使用的定位器指向一个P标记,它们不接受.sendkeys的输入。您需要指向type='file'的输入。可能是的重复项。您刚刚将真实密码发布到一个实时站点吗?它对您有帮助吗?