Не удалось получить элемент по xpath внутри div с :: before - PullRequest
0 голосов
/ 23 февраля 2020

Мне нужно получить список веб-элементов с помощью объекта веб-драйвера

findElements(By.xpath(""));

Я получаю список с помощью xpath как //*[@class=\"providers-list clearfix\"]. Однако я получаю сообщение об ошибке всякий раз, когда пытаюсь получить элемент inside

<div class="providers-list clearfix">::before 
  <div class="data-container">..</div>
</div>

Этот xpath выдает мне ошибку:

// [@ class = \ "data-container \"] ", так как такого элемента нет: Невозможно locate element: {"method": "xpath", "selector": "// [@ class =" data-container "]"}

Ответы [ 3 ]

1 голос
/ 24 февраля 2020

Наличие например, :: before подразумевает, что элемент либо:

  • Styled или
  • Вставлен перед некоторый контент

Таким образом, элемент является динамическим c по своей природе и для идентификации элемента вам нужно вызвать WebDriverWait для желаемого visibilityOfElementLocated () и Вы можете использовать любую из следующих стратегий локатора :

  • cssSelector:

    WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("div.providers-list.clearfix div.data-container")));
    
  • xpath :

    WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//div[@class='providers-list clearfix']//div[@class='data-container']")));
    
0 голосов
/ 23 февраля 2020

вы пытаетесь получить доступ с объекта, который нашел findElements? Вот как это работает в идеале:

    List <WebElement> myList = driver.findElements(By.xpath("//*[@class=\"providers-list clearfix\"]"));
                for(WebElement eachList:myList)
                {
         System.out.println(eachList.findElement(By.xpath("div[1]")).getText());
                }
0 голосов
/ 23 февраля 2020

используйте этот X-путь - // * [содержит (@class, 'clearfix')] *

...