Как найти элемент в HTML через Selenium и C # - PullRequest
0 голосов
/ 27 февраля 2019

Я новичок в c # и у меня проблемы с поиском элементов.Я не совсем понимаю, как найти относительные xpaths.Я пытаюсь найти элемент.Мой код указан ниже:

IWebElement webElement = driver.FindElement(By.XPath("Nothing I put here works"));
Thread.Sleep(1000);
IJavaScriptExecutor executor = (IJavaScriptExecutor)driver;

Вот что я пытаюсь найти:

<li _ngcontent-c2="" class="header-item person-search ng-tns-c2-1 ng-star-inserted" ngbdropdown="" ngbtooltip="Person Search" placement="left">
    <a _ngcontent-c2="" class="dropdown-toggle dropdown-toggle" aria-haspopup="true" href="javascript:void(0)" ngbdropdowntoggle="" aria-expanded="false">
        <span _ngcontent-c2="" class="fa fa-search-plus block"></span>
    </a>
</li>

1 Ответ

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

Требуемый элемент является элементом Angular , поэтому для определения местоположения элемента вам нужно вызвать WebDriverWait с ExpectedConditions как ElementToBeClickable Method (By) , и вы можете использовать любое из следующих решений:

  • CssSelector:

    IWebElement webElement = new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("li.header-item.person-search.ng-star-inserted[ngbtooltip='Person Search']>a.dropdown-toggle>span.fa.fa-search-plus.block"))).Click();
    
  • XPath:

    IWebElement webElement = new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//li[@class='header-item person-search ng-tns-c2-1 ng-star-inserted' and @ngbtooltip='Person Search']//a[@class='dropdown-toggle dropdown-toggle']/span[@class='fa fa-search-plus block']")));
    

Обновление

Если вы используете nuget, найдите DotNetSeleniumExtras.WaitHelpers и импортируйте это пространство имен в свой класс, и вы можете сделать это:

new WebDriverWait(driver, new TimeSpan(0, 0, 30)).Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementToBeClickable(By.Id("elementID")));

Соответствующее обсуждение можно найти в C # Selenium «Ожидаемые условия устарели»

...