Selenium не может найти ссылку на моей HTML-странице - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть следующий фрагмент кода на моей странице HTML, где мне нужно найти гиперссылку "Статистика ссылок" и щелкнуть по ней, чтобы перейти на страницу.

Я написал программу Seleniumс Java, который делает это, но при выполнении теста он не может найти ссылку и выдает ошибку.

home.html

<div id="header">
<table summary="" width="100%" border="0" cellpadding="0" cellspacing="0">
  <tr>
        <td width="20%" ><img src="images/jpmlogo2.gif" border="0" /></td>
        <td>&nbsp;</td>
        <td width="1%" nowrap></td>
        <td width="1%" nowrap></td>
        <td width="1%" nowrap class="TransDetailHEADER">Nital  Chandel</td>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
      <td width="1%" align="right">
        <input type="button"  class="Button_Red_Small"  value="Logout" onclick="logoff('logoff.do')" />
      </td>
    </tr>
     <tr>
        <td colspan="6" align="right" class="app_name">US Router</td>
    </tr><tr>
    <td colspan="6"> <!-- Header Menu -->
<ul class="qmmc" id="qm0">
    <li ><a href="linkSummary.htm" id="summary" >Link Summary</a></li>
    <li ><a href="probMessagesQueue.htm" id="problem" >Problem Queue</a></li>
    <li ><a href="searchAuditLogs.htm" id="audit" >Audit Logs</a></li>
    <li ><a href="messageLists.htm" id="messages" >Message Summary</a></li>
    <li ><a href="#" id="reports">Reporting</a>
        <ul >
            <li><a href="linkStatsReport.htm">Link Statistics</a></li>
            <li><a href="operatorActivityReport.htm">Operator Activity</a></li>
            <li><a href="rejectReport.htm">Rejects</a></li>
            <li><a href="eodReport.htm">EOD Statistics</a></li>
            <li><a href="eodProofing.htm">EOD Proofing</a></li>
        </ul>
    </li>
    <li ><a href="recoverFile.htm?method=display" id="messages">Recover File Transmission</a></li>
    <li ><a href="troubleTicket.htm" target="_blank" id="trouble" >Trouble Ticket</a></li>
    <li ><a href="help.jsp" id="help" >Help</a></li>

</ul>
     </td>
  </tr>
 </table>
</div>

ReportingLinkStatisticsPageTest.java

@RunWith(SpringRunner.class)
@SpringBootTest
public class ReportingLinkStatisticsPageTest extends BaseSeleniumTests {

    @Test
    public void loadPage() {
        validateSearchSection();
    }

    private void validateSearchSection() {
        this.driver.get(BASE_URL);

        String htmlSource = this.driver.getPageSource();
        assertTrue(htmlSource.contains("US Router"));

        WebElement we = this.driver.findElement(By.linkText("Link Statistics"));
        assertNotNull(we);
        we.click();
    }

}

Ошибка:

org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"link text","selector":"Link Statistics"}
  (Session info: headless chrome=71.0.3578.98)
  (Driver info: chromedriver=71.0.3578.137 (86ee722808adfe9e3c92e6e8ea746ade08423c7e),platform=Windows NT 6.1.7601 SP1 x86_64) (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: '3.9.1', revision: '63f7b50', time: '2018-02-07T22:25:02.294Z'
System info: host: 'WCD1122021', ip: '172.26.164.137', os.name: 'Windows 7', os.arch: 'amd64', os.version: '6.1', java.version: '1.8.0_192'
Driver info: org.openqa.selenium.chrome.ChromeDriver
Capabilities {acceptInsecureCerts: false, acceptSslCerts: false, applicationCacheEnabled: false, browserConnectionEnabled: false, browserName: chrome, chrome: {chromedriverVersion: 71.0.3578.137 (86ee722808ad..., userDataDir: C:\Users\R649526\AppData\Lo...}, cssSelectorsEnabled: true, databaseEnabled: false, goog:chromeOptions: {debuggerAddress: localhost:56195}, handlesAlerts: true, hasTouchScreen: false, javascriptEnabled: true, locationContextEnabled: true, mobileEmulationEnabled: false, nativeEvents: true, networkConnectionEnabled: false, pageLoadStrategy: normal, platform: XP, platformName: XP, rotatable: false, setWindowRect: true, takesHeapSnapshot: true, takesScreenshot: true, unexpectedAlertBehaviour: , unhandledPromptBehavior: , version: 71.0.3578.98, webStorageEnabled: true}
Session ID: 9699df9b7ed4484b22e81f203e4d5e5c
*** Element info: {Using=link text, value=Link Statistics}

    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:214)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:166)
    at org.openqa.selenium.remote.http.JsonHttpResponseCodec.reconstructValue(JsonHttpResponseCodec.java:40)
    at org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:80)
    at org.openqa.selenium.remote.http.AbstractHttpResponseCodec.decode(AbstractHttpResponseCodec.java:44)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute(HttpCommandExecutor.java:160)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute(DriverCommandExecutor.java:83)
    at org.openqa.selenium.remote.RemoteWebDriver.execute(RemoteWebDriver.java:601)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:371)
    at org.openqa.selenium.remote.RemoteWebDriver.findElementByLinkText(RemoteWebDriver.java:425)
    at org.openqa.selenium.By$ByLinkText.findElement(By.java:246)
    at org.openqa.selenium.remote.RemoteWebDriver.findElement(RemoteWebDriver.java:363)
    at com.gct.ft.ReportingLinkStatisticsPageTest.validateSearchSection(ReportingLinkStatisticsPageTest.java:29)
    at com.gct.ft.ReportingLinkStatisticsPageTest.loadPage(ReportingLinkStatisticsPageTest.java:19)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:73)
    at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:83)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Заменить:

WebElement we = this.driver.findElement(By.linkText("Link Statistics"));

На следующее:

WebElement we = this.driver.findElement(By.xpath("//a[text()='**Link Statistics**']")).click();
0 голосов
/ 14 февраля 2019

Вместо

WebElement we = this.driver.findElement(By.linkText("Link Statistics"));

Попробуйте это.

WebElement we = this.driver.findElement(By.xpath("//a[text()[contains(.,'Link Statistics')]]"));

Посмотрите, поможет ли это.

...