Я пытаюсь найти элемент "import" с помощью Selenium Webdriver в С#. Попробовали следующие коды, но ничего не нашли.
driver.FindElement(By.XPath("//*[@class='menu_bg']/ul/li[3]")).Click();
driver.FindElement(By.XPath("//*[@id='import']/a")).Click();
driver.FindElement(By.CssSelector("#import>a")).Click();
driver.FindElement(By.XPath("//*[@class='menu_bg']/ul/li[3]/a")).Click();
driver.FindElement(By.CssSelector("ul[@class='menu_bg']>li[value='3']")).Click();
Пожалуйста, помогите мне. Страница дизайна выглядит следующим образом:
<body>
<div class="header_bg"></div>
<div class="menu_bg">
<ul class="menu">
<li id="retrieve"></li>
<li id="scan" class="test"></li>
<li id="import">
<a target="main" href="import/import.aspx" onclick="clickme(this,'import')">Import</a>
</li>
<li id="admin"></li>
<li id="help"></li>
<li style="float: right;"></li>
</ul>
</div>
</body>
Все время я получил ошибку, как показано ниже:
unable to find the element
Индексы XPath основаны на 1, в отличие от большинства других языков, на которых они основаны на 0.
Это означает, что вы на самом деле нацеливаете второй элемент li
, у которого нет элемента anchor
.
Так:
//*[@class='menu_bg']/ul/li[3]/a
Однако этот запрос XPath невелик и слишком строг на позиции, поэтому, хотя этот новый исправленный XPath выше должен работать, я бы посоветовал вам подумать о чем-то другом.
Просмотрев эту ссылку (спасибо @Arran), проблема была исправлена. "переключение" на текущий IFrame направляет Selenium для отображения любых запросов к этому фрейму.
driver.SwitchTo().Frame()
Вы можете сделать это, цепляя Selenium 'FindElement' так;
driver.FindElement(By.Id("import")).FindElement(By.TagName("a"));
который даст вам дочерний элемент с идентификатором, который имеет тег 'a'.
Другой способ, которым вы могли бы это сделать, - IJavascriptExecutor
ваш Driver
в IJavascriptExecutor
и выполнить javascript непосредственно в браузере с помощью селектора JQuery. Я считаю это лучше для более сложных поисков Selenium;
((IJavascriptExecutor)Driver).ExecuteScript("$("a[target='main'][href='import/import.aspx'])").click();