Java I';m获取NoTouchElement异常错误

Java I';m获取NoTouchElement异常错误,java,selenium,testing,selenium-webdriver,nosuchelementexception,Java,Selenium,Testing,Selenium Webdriver,Nosuchelementexception,我已经分享了下面的代码,请让我知道更正 import org.openqa.selenium.By; import org.openqa.selenium.ie.InternetExplorerDriver; public class MyClass { public static void main(String[] args) throws InterruptedException { // TODO Auto-generated method stub

我已经分享了下面的代码,请让我知道更正

import org.openqa.selenium.By;
import org.openqa.selenium.ie.InternetExplorerDriver;

public class MyClass {

    public static void main(String[] args) throws InterruptedException {
        // TODO Auto-generated method stub
        /*System.setProperty("webdriver.ie.driver","D:\\Backup\\Documents\\Automation\\drivers\\IEDriverServer.exe");
        InternetExplorerDriver driver = new InternetExplorerDriver();
        driver.get("https://www.google.com");

        WebDriverWait driverWait = new WebDriverWait(driver,50);

        driverWait.until(ExpectedConditions.elementToBeClickable(By.xpath("//*[@id='lst-ib']"))).click();
        driver.findElementByXPath("//*[@id='lst-ib']").sendKeys("Make My Trip");
        driver.findElementById("_fZl").click();
        driverWait.until(ExpectedConditions.elementToBeClickable(By.linkText("MakeMyTrip, India's No 1 Travel Site | Book Hotels, Flights, Holiday ..."))).click();
        Screenshot S1 = new Screenshot();
        S1.Takescreen();*/
        String username = null;
        String password = null;
        MyClass C1 = new MyClass();
        C1.URLs(username, password);
    }

    public void URLs  (String username, String password) throws InterruptedException
    {

        System.setProperty("webdriver.ie.driver","D:\\Backup\\Documents\\Automation\\drivers\\IEDriverServer.exe");
        InternetExplorerDriver driver = new InternetExplorerDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://google.com");
        driver.findElement(By.className("lst lst-tbb sbibps")).sendKeys("irctc");
        driver.findElement(By.id("_fZl")).click();
        Thread.sleep(10000);
        driver.findElement(By.linkText("IRCTC Next Generation eTicketing System")).click();
        username = driver.findElement(By.id("usernameId")).getTagName();
        password = driver.findElement(By.className("loginPassword")).getTagName();
        System.out.println(username);
        System.out.println(password);           
    }
}
错误:

线程“main”org.openqa.selenium.NoSuchElementException中的异常: 找不到类名=lst lst tbb sbibps的元素(警告: 服务器未提供任何stacktrace(跟踪信息)命令 持续时间或超时:10.45秒


lst lst tbb sbibps实际上是3个不同的类。要使用所有这些选项,您可以使用
cssSelector

driver.findElement(By.cssSelector(".lst.lst-tbb.sbibps")).sendKeys("irctc");
使用
className
只能使用一个类,尽管它们看起来都不是唯一的

driver.findElement(By.className("lst")).sendKeys("irctc");
// or
driver.findElement(By.className("lst-tbb")).sendKeys("irctc");
// or
river.findElement(By.className("sbibps")).sendKeys("irctc");

在Google.com中,通常有三个输入标签可供搜索,但其中两个具有hidden=true属性

<div id="gs_sc0" class="gsfi" style="background: transparent none repeat scroll 0% 0%; color: transparent; padding: 0px; position: absolute; z-index: 2; white-space: pre; visibility: hidden;"/>

<input id="gs_taif0" class="gsfi" disabled="" autocomplete="off" aria-**hidden="true"** style="border: medium none; padding: 0px; margin: 0px; height: auto; width: 100%; position: absolute; z-index: 1; background-color: transparent; color: silver; left: 0px; visibility: hidden;" dir="ltr"/>

<input id="gs_htif0" class="gsfi" disabled="" autocomplete="off" aria-hidden="true" style="border: medium none; padding: 0px; margin: 0px; height: auto; width: 100%; position: absolute; z-index: 1; background-color: transparent; color: silver; transition: all 0.218s ease 0s; opacity: 0; text-align: left; left: 0px;" dir="ltr"/>


正如@Guy指出的,您试图访问3个不同的类,因此不能对所有类使用By.className方法

我认为Guy的方法是正确的,但只有当您的用例与Guy所理解的完全一样时,它才会起作用

您的用例是什么?
  • 是否要访问属于class
    lst
    lst tbb
    sbibps
  • 是否要访问所有3类的所有元素
    lst
    lst tbb
    sbibps
  • 是否要访问属于
    sbibps
    类的所有元素,该类元素是
    lst tbb
    的子类,它是
    lst
    的子类(即
    .lst.lst tbb.sbibps
  • 解决
  • 对于第一个用例,这应该足够了(参见)
  • driver.findElements(由.cssSelector(“.lst、.lst tbb、.sbibps”);

  • 对于第二个用例,我发现了这一点(参见)
  • driver.findElements(By.xpath(“//*[@class='lst-lst-tbb-sbibps]”);

    或者这个,如果你不知道它是否有更多的类

    driver.findElements(By.xpath(“/*[contains(@class,'lst-lst-tbb-sbibps')]);

  • 对于最后一个用例,这应该有效(归功于@Guy)
  • driver.findElements(By.cssSelector(“.lst.lst tbb.sbibps”);

    注意!我使用了
    findElement
    方法,而不是
    findElement
    方法,它会生成一个列表,并且不会引发异常,如果不满足条件,则列表只是空的

    此外: 请参阅以获取参考

    尝试以下代码

    driver.get("http://google.com");
    driver.manage().window().maximize();
    driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
    
    driver.findElement(By.id("lst-ib")).sendKeys("irctc"); 
    
    WebDriverWait wait = new WebDriverWait(driver, 5);   //use explicit wait method for 5 seconds until element not found.
    wait.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.xpath("//a[text()='IRCTC Next Generation eTicketing System']"))));
    driver.findElement(By.xpath("//a[text()='IRCTC Next Generation eTicketing System']")).click();
    
    WebDriverWait homepage = new WebDriverWait(driver, 5);   //use explicit wait method for 5 seconds until element not found. Because when click on link button page is getting loading so wait for few seconds.
    homepage.until(ExpectedConditions.elementToBeClickable(driver.findElement(By.id("usernameId"))));
    
    driver.findElement(By.id("usernameId")).sendKeys("Username");
    driver.findElement(By.xpath("//input[@class='loginPassword'][@type='password']")).sendKeys("XXXXX");
    
    注意:-不要使用
    Thread.sleep()
    ,而是使用
    显式等待
    方法。

    使用以下方法:

    driver.findElement(By.name("q")).sendKeys("irctc");
    

    请使用下面的代码,希望它能工作

    driver.findElement(By.className("gsfi")).sendKeys("irctc");
    

    尝试下面的代码,它将在您的情况下工作(我在我的机器上测试了它)


    让我知道它是否适用于您。

    感谢您的回复,我尝试了cssselector,但仍然无法找到元素异常,我还尝试了按“Id”查找元素正如你提到的,没有什么能帮我找到element@GSelenium您正在尝试键入搜索框吗?如果您的问题已解决,请将此答案标记为已接受。
    driver.findElement(By.className("gsfi")).sendKeys("irctc");
    
    import java.util.concurrent.TimeUnit;
    import org.openqa.selenium.By;
    import org.openqa.selenium.ie.InternetExplorerDriver;
    
    public class MyClass {
    
    public static void main(String[] args) throws InterruptedException {
        String username = null;
        String password = null;
        MyClass C1 = new MyClass();
        C1.URLs(username, password);
    }
    
    public void URLs  (String username, String password) throws InterruptedException
    {
        System.setProperty("webdriver.ie.driver","D:\\Backup\\Documents\\Automation\\drivers\\IEDriverServer.exe");
        InternetExplorerDriver driver = new InternetExplorerDriver();
        InternetExplorerDriver driver = new InternetExplorerDriver();
        driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
        driver.get("https://google.com");
        driver.findElement(By.id("lst-ib")).sendKeys("irctc");
        driver.findElement(By.id("_fZl")).click();
        Thread.sleep(10000);
        driver.findElement(By.linkText("IRCTC Next Generation eTicketing System")).click();
        username = driver.findElement(By.id("usernameId")).getTagName();
        password = driver.findElement(By.className("loginPassword")).getTagName();
        System.out.println(username);
        System.out.println(password);           
    }
    }