Не удается найти элемент по частичному тексту ссылки, используя Java и Selenium - PullRequest
0 голосов
/ 15 января 2019

Использование geckodriver 0.23.0, firefox 64.0.2, selenium 3.12, java 8 Я не могу найти элемент по тексту частичной ссылки. Рамка не используется. Текст ссылки: « Аккаунты (1) ». На странице есть только один экземпляр того же текста " Просмотреть все учетные записи "

HTML:

<li>    
      <a href="/accounting/view_all_accounts?_t=039f18daf35b4a00f0093dd17aa70730be385f6f&amp;to_render=account" class="first accounting_page_menu  ">Accounts (1)</a>
      <ul>
        <li>
          <a href="/accounting/details?_t=e3d4ea94f5ed862d95196a620f1147be13b02979&amp;to_render=account" class="first accounting_page_menu ">Primary</a>
        </li>

        <li>
        <a onclick="javascript: ModalUtil.loadEditableModal('/accounting/details_new_account', false, false, true);" class="add-accounts">Add New Account...</a>
        </li>
        <li>
        <a href="/accounting/view_all_accounts?_t=039f18daf35b4a00f0093dd17aa70730be385f6f&amp;to_render=account" class="first accounting_page_menu ">View All Accounts</a>
        </li>
      </ul>
  </li>

Код, который я использую, чтобы найти элемент: "Accounts (n)", где n = 1, 2, 3 ...

driver.findElement(By.partialLinkText("Accounts (")).click();

Я попытался с " Аккаунтами " и с " Аккаунтами ("), и они оба возвращают те же 404, не найденные - такой ошибки элемента нет

Журнал консоли:

1547499923019   webdriver::server   DEBUG   -> POST /session/bed7e7d2-d849-4bd0-ab17-fdca3fb080f9/element {
  "value": "Accounts ",
  "using": "partial link text"
}
1547499923020   Marionette  TRACE   0 -> [0,315,"WebDriver:FindElement",{"using":"partial link text","value":"Accounts "}]
1547499923241   Marionette  TRACE   0 <- [1,315,{"error":"no such element","message":"Unable to locate element: Accounts ","stacktrace":"WebDriverError@chrome://mario ... entError@chrome://marionette/content/error.js:388:5\nelement.find/</<@chrome://marionette/content/element.js:339:16\n"},null]
1547499923240   webdriver::server   DEBUG   <- 404 Not Found {"value":{"error":"no such element","message":"Unable to locate element: Accounts ","stacktrace":"WebDriverError@chrome://marionette/content/error.js:178:5\nNoSuchElementError@chrome://marionette/content/error.js:388:5\nelement.find/</<@chrome://marionette/content/element.js:339:16\n"}}

1 Ответ

0 голосов
/ 15 января 2019

Как вы упомянули, вы пытаетесь найти элемент с текстом как Accounts (n) , где n = 1, 2, 3 ... и еще пару элементов с linkText as Добавить новую учетную запись и Просмотреть все учетные записи существует, вместо использования partialLinkText было бы лучше использовать XPath , и вы можете использовать следующее решение:

  • * 1017 XPath *:

    new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//li/a[@class='first accounting_page_menu' and starts-with(@href,'/accounting/view_all_accounts?')][starts-with(.,'Accounts')]"))).click();
    

Обновление

Согласно обсуждению Официальные стратегии поиска для веб-драйвера Селектор текста с частичной ссылкой предпочтительнее, чем Селектор XPath . Однако согласно этому сценарию использования из-за наличия похожих текстов ссылок было бы проще создать XPath .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...