当前位置: 首页 > 知识库问答 >
问题:

我得到了NoSuchElement异常错误

蒋鹏鹍
2023-03-14

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

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 . open QA . selenium . nosuchelementexception中出现异常:无法找到类名= = lst lst-TBB SBI PPS的元素(警告:服务器未提供任何stacktrace信息)命令持续时间或超时:10.45秒

共有3个答案

干茂才
2023-03-14

在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"/>

所以我们必须使用不隐藏的输入,在这种情况下使用

driver.findElement(By.id("lst-ib")).sendKeys("irctc");
傅新
2023-03-14

实际上,这是3个不同的类。要使用所有这些,您可以使用css选择器

driver.findElement(By.cssSelector(".lst.lst-tbb.sbibps")).sendKeys("irctc");

使用<code>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");
罗晨
2023-03-14

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

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

  1. 您是否要访问所有属于类lstlst-tbbsbibpsOR
  2. 的元素
  3. 您是否要访问所有3个类lstlst-tbbsbibpsOR
  4. 的所有元素
  5. 是否要访问所有属于sbibps类的元素,它是lst-tbb的子类,它是lst的子类(即.lst.lst-tbb.sbibps
  1. 对于第一个用例,这就足够了(参见Selenium Webdriver w/Java:使用一个命令定位具有多个类名的元素)

driver.findElements(由.css选择器(“.lst、.lst tbb、.sbibps”)

driver.findElementsBy.xpath ("//*[@类]"));

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

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

driver.findElements(通过.cssSelector(.lst.lst tbb.sbibps))

注意力!我使用了 findElements 方法,而不是 findElement 方法,它会产生一个列表并且不会引发异常,而是在不满足条件时列表为空。

另外:参见需要通过css查找selenium中的元素以供参考

 类似资料:
  • 问题内容: 我有以下代码从给定列表中选择一个选项,它通常可以正常工作,但有时会失败,并在第二个if上出现NoSuchElement异常。我的印象是,如果找不到元素,它将再次回到循环中。我相信解释很简单……有人能启发我吗? 问题答案: 好吧,我是Java专家,所以我将不提供代码,而是提供算法: 您的代码(我认为)应该检查是否显示了该元素,如果没有显示,请再等待2,5秒 失败的原因是,有时显示元素需要

  • 我看过很多关于如何使用硒的示例脚本 switch_to.window 这是一个关于我所学的示例脚本,根本不起作用: 我得到了错误消息: InvalidArgumentException:预期“handle”为字符串,但得到了[object Undefined]未定义 很明显,我也厌倦了同样结果的普通网页。 有人有同样的问题吗?

  • 问题内容: 我已经在“ userInfo”类中实现了Serializable。我仍然感到异常。这是输出控制台- 这是我的两节课: 问题答案: 为什么我实现了’Serializable’却得到NotSerializableException异常 你还没有 java.io.NotSerializableException:chatservernazmus.User公共类userInfo实现了Seria

  • 问题内容: 我有一个简单的方法,可将命令打印到屏幕上,扫描用户的输入,然后将其作为字符串返回。如果用户输入无效,它将通知用户并再次询问。该方法运行完美,但是我的讲师提到我们应该始终关闭资源,因此我回过头来添加了close方法,现在无论用户输入什么,每次调用该方法时都会收到NoSuchElementException。这是代码… 例外总是指向用户输入以scan.nextLine()。trim()开头

  • 问题内容: 我已经找到了这段代码,无法找出解决方法。在运行代码时,为什么不提示用户输入而不是Java确定没有输入?错误跟踪如下。 这是错误- 问题答案: 简单的答案是当您关闭扫描仪时- 基础输入流也会关闭:http : //docs.oracle.com/javase/7/docs/api/java/util/Scanner.html#close() 要修复此问题,请在主菜单中创建一次:

  • 我使用的是SPARK-SQL-2.4.1、SPARK-Cassandra-Connector2.11-2.4.1和java8以及apache Cassandra3.0版本。 我有如下所示的spark-submit或spark集群环境,可以加载20亿条记录。 当我检查日志时,我看到警告com.datastax.spark.connector.writer.QueryExecutor-BusyPool