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

org.openqa.selenium.noSuchelementException即使xpath是正确的并且添加了wait

萧自珍
2023-03-14

我正在使用selenium-java-2.53.jar点击一个网站并执行搜索操作。serach结果出来后,我需要读取数据。网站url为https://340bopais.hrsa.gov/CoveredEntitySearch。我在340B ID的文本框中放了一个值为CH02123B,然后单击“搜索”。在此之后,结果显示在一个表中。在这之前,它和硒的作用很好。但在此之后,当我尝试使用driver.findElement和by.xpath读取数据时,我得到了一个异常:org.openqa.selenium.nosuchelementException:no such element:Unable to locate element。

<tr class="rgRow" valign="top" id="ctl00_ContentPlaceHolder1_CoveredEntitySearchGrid_ctl00__0" role="row">
        <td role="gridcell"><input id="ctl00_ContentPlaceHolder1_CoveredEntitySearchGrid_ctl00_ctl04_ClientSelectColumnSelectCheckBox" type="checkbox" name="ctl00$ContentPlaceHolder1$CoveredEntitySearchGrid$ctl00$ctl04$ClientSelectColumnSelectCheckBox" title="Select/Deselect Row" role="checkbox" aria-label="ClientSelectColumn checkbox" aria-checked="false"></td><td role="gridcell"><a title="CH02123B" href="cedetails/12136">CH02123B</a></td>
        <td role="gridcell">CH</td>
        <td role="gridcell">NEIGHBORHOOD HEALTH SERVICES CORPORATION</td>
        <td role="gridcell">Neighborhood Health Center The Healthy Place</td>
        <td role="gridcell">427 Darrow Ave</td>
        <td role="gridcell">Plainfield</td>
        <td role="gridcell">NJ</td>
        <td role="gridcell">10/01/2004</td>
        <td role="gridcell">&nbsp;</td>
        <td role="gridcell">02/13/2017</td>
</tr>

下面是我的代码:

StackApplication.class.getClassLoader().getResource("driver/chromedriver.exe").getFile();
WebDriver driverHL = new ChromeDriver();
driverHL.navigate().to("https://340bopais.hrsa.gov/coveredentitysearch"); 
driverHL.findElement(By.xpath("//*[@id=\"ContentPlaceHolder1_ceSearchCtrl_txt340BID\"]")).sendKeys("CH02123B");
driverHL.findElement(By.xpath("//*[@id=\"btnSearch\"]")).click() ; 
WebDriverWait myDynamicElement = new WebDriverWait(driver, 30);
myDynamicElement.until(ExpectedConditions.presenceOfElementLocated(By.xpath("//tr[@id=\"ctl00_ContentPlaceHolder1_CoveredEntitySearchGrid_ctl00__0\"]/td[4]")));
driverHL.findElement(By.xpath("//tr[@id=\"ctl00_ContentPlaceHolder1_CoveredEntitySearchGrid_ctl00__0\"]/td[4]"));

异常的完整堆栈跟踪(覆盖某些特定细节):

Exception in thread "main" org.openqa.selenium.TimeoutException: Timed out after 30 seconds waiting for presence of element located by: By.xpath: //tr[@id="ctl00_ContentPlaceHolder1_CoveredEntitySearchGrid_ctl00__0"]/td[4]
Build info: version: '2.53.1', revision: 'a36b8b1cd5757287168e54b817830adce9b0158d', time: '2016-06-30 19:26:09'
System info: host: 'hostName', ip: '<ip_address>', os.name: '<OS_Name>', os.arch: '<arch>', os.version: '<x.x>', java.version: '1.7.0_13'
Session ID: 7636dc2ad6277bd827467c2f40c3f322
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [<SomeMachineSpecificData>]
    at org.openqa.selenium.support.ui.WebDriverWait.timeoutException(WebDriverWait.java:80)
    at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:261)
    at comm.myProject.MyDownloader.MyApplication.main(StackApplication.java:67)
Caused by: org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//tr[@id="ctl00_ContentPlaceHolder1_CoveredEntitySearchGrid_ctl00__0"]/td[4]"}
  (Session info: chrome=63.0.3239.108)
  (Driver info: chromedriver=2.34.522940 (1a76f96f66e3ca7b8e57d503b4dd3bccfba87af1),platform=Windows NT 6.1.7601 SP1 x86) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 0 milliseconds
For documentation on this error, please visit: http://seleniumhq.org/exceptions/no_such_element.html
Build info: version: '2.53.1', revision: 'a36b8b1cd5757287168e54b817830adce9b0158d', time: '2016-06-30 19:26:09'
System info: host: 'hostName', ip: '<ip_address>', os.name: '<OS_Name>', os.arch: '<arch>', os.version: '<x.x>', java.version: '1.7.0_13'
*** Element info: {Using=xpath, value=//tr[@id="ctl00_ContentPlaceHolder1_CoveredEntitySearchGrid_ctl00__0"]/td[4]}
Session ID: 7636dc2ad6277bd827467c2f40c3f322
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities [<specific info>]
    at sun.reflect.GeneratedConstructorAccessor10.newInstance(Unknown Source)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
    at java.lang.reflect.Constructor.newInstance(Unknown Source)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:206)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:158)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:678)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:363)
    at org.openqa.selenium.remote.RemoteWebDriver.findElementByXPath(RemoteWebDriver.java:500)
    at org.openqa.selenium.By$ByXPath.findElement(By.java:361)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:355)
    at org.openqa.selenium.support.ui.ExpectedConditions.findElement(ExpectedConditions.java:899)
    at org.openqa.selenium.support.ui.ExpectedConditions.access$000(ExpectedConditions.java:41)
    at org.openqa.selenium.support.ui.ExpectedConditions$6.apply(ExpectedConditions.java:181)
    at org.openqa.selenium.support.ui.ExpectedConditions$6.apply(ExpectedConditions.java:178)
    at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:238)
    ... 1 more      

共有1个答案

司徒兴德
2023-03-14

你的代码对我来说很好,尽管我不得不改变这一行...

WebDriverWait myDynamicElement = new WebDriverWait(driver, 30);

WebDriverWait myDynamicElement = new WebDriverWait(driverHL, 30);
 类似资料:
  • 我的Xpath是正确的 代码:- 这是运行测试用例的chrome窗口的截图:在这里你也可以看到元素是可见的 错误消息图像

  • 问题内容: 我在动态添加选择标签时遇到问题,没有应用CSS和JQM添加的其他html标签。 HTML: JS: 我试过了: 问题答案: 我不知道为什么不起作用,但是对于页面-您可以在元素上使用一次。之后,它将在下一次跳过该元素。 在添加内容之前克隆选择(不带参数的克隆) 取出原件 向克隆的元素添加内容 放回dom 调用或对其进行调用,或调用包含它的元素。 应该有帮助。如果不是,请尝试从头开始创建一

  • 问题内容: 我正在创建一个小程序,该程序将读取一个文本文件,其中包含大量随机生成的数字,并产生诸如均值,中位数和众数之类的统计信息。我已经创建了文本文件,并确保在声明为新文件时名称完全相同。 是的,该文件与类文件位于同一文件夹中。 } 错误行的内容如下: 问题答案: 如何添加: 打印出来。它会告诉您当前的工作目录是什么。然后,您应该能够看到为什么找不到文件。 除了找不到代码之外,您还可以检查以允许

  • 请,任何人都可以帮助我找到正确的XPath来检索日期值“07/05/2018 04:45” 我试过但没有成功: /输入[@type=“text”]@值 //*[@id="start Date"]

  • 我正在连接到mysql服务器并进行查询。我一直得到一个ER_BAD_FIELD_ERROR:'field list'中的未知列