Как мне обойти этот слой JavaScript с помощью селена C #? - PullRequest
0 голосов
/ 06 ноября 2019

Ниже приведен исходный код, с которым я пытаюсь работать. Я пытался использовать такие методы, как:

driver.FindElement(By.XPath("//span[@data-bind = 'text: Caption']")).Click();
driver.FindElement((By.XPath("//*[contains(text(),'document')]"))).Click();

Все обычные методы селена, которые я использовал в своем проекте, не смогли найти ничего.

<div class="caption" data-bind="css: { 'doc-downloader-wrapper': $data.IsDocument() }">
  <a data-bind="css: { 'protected': IsProtectedDocument(), 'doc-downloader': $data.IsDocument(), 'no-       details': !$data.HasDetails() }, attr: { href: Link, target: $data.IsLinkDocument() ? '_blank' :         '_self' }">
    <span data-bind="text: Caption"></span>
  </a>
</div>

1 Ответ

0 голосов
/ 07 ноября 2019

Требуемый элемент является динамическим элементом, поэтому вы должны вызвать WebDriverWait для требуемого ElementToBeClickable , и вы можете использовать любой из следующих Стратегий локатора в качестве решения:

  • CssSelector:

    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.CssSelector("div.caption[data-bind*='doc-downloader-wrapper']>a[data-bind*='IsProtectedDocument']>span[data-bind$='Caption']"))).Click();
    
  • XPath:

    new WebDriverWait(driver, TimeSpan.FromSeconds(20)).Until(ExpectedConditions.ElementToBeClickable(By.XPath("//div[@class='caption' and contains(@data-bind, 'doc-downloader-wrapper')]/a[contains(@data-bind, 'IsProtectedDocument')]/span[contains(@data-bind, 'Caption')]"))).Click();
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...