Как идентифицировать первую запись в виртуальной таблице с помощью селектора xpath или CSS - PullRequest
0 голосов
/ 27 февраля 2020

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

Если я использую его для поиска по имени тега, он вернет более 100 Веб-элементы.

Могу ли я узнать, как мне определить, использовать XPath или CSS селектор для получения первой записи, отображаемой на странице.

введите описание изображения здесь

    WebElement menuList = driver.findElement(By.cssSelector(".scrollable-content"));
    List<WebElement> search_li = menuList.findElements(By.tagName("div"));
    WebElement searchresult = driver.findElement(By.ByXPath.className("grid-view-drop-area ng-star-inserted"));
    searchresult.click();

Ответы [ 3 ]

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

findElement() вернет первый соответствующий элемент

WebElement searchresult = driver.findElement(By.cssSelector(".grid-view-drop-area.ng-star-inserted"));
searchresult.click();

Вы также можете найти весь список и щелкнуть первый элемент в нем

WebElement searchresult = driver.findElements(By.cssSelector(".grid-view-drop-area.ng-star-inserted"));
searchresult.get(0).click();
0 голосов
/ 28 февраля 2020

Спасибо DebanjanB и Гаю за ваш ценный ввод.

Я использовал комбинацию вашего ввода, чтобы получить идентификацию уникального объекта пользовательского интерфейса.

List<WebElement> searchresult = driver.findElements(By.xpath("//div[@class='scrollable-content']/div[@class='grid-view-drop-area ng-star-inserted' and starts-with(@id, 'grid-row')]"));
searchresult.get(0).click();
0 голосов
/ 27 февраля 2020

Немного больше информационных промежутков HTML расширенных тегов <div> помогло бы нам построить канонический ответ. Тем не менее, чтобы извлечь количество записей, отображаемых на странице, вы должны вызвать WebDriverWait для visibilityOfAllElementsLocatedBy(), и вы можете использовать любую из следующих Стратегий локатора :

  • cssSelector:

    System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.cssSelector("div.grid-view-drop-area.ng-star-inserted[id^='grid-row']"))).size());
    
  • xpath:

    System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//div[@class='grid-view-drop-area ng-star-inserted' and starts-with(@id, 'grid-row')]"))).size());
    

Для получения Первая запись, которую вы можете использовать одно из следующих решений:

  • cssSelector:

    WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.visibility_of_element_located(By.cssSelector("div.scrollable-content>div.grid-view-drop-area.ng-star-inserted[id^='grid-row']")));
    
  • xpath:

    WebElement element = new WebDriverWait(driver, 20).until(ExpectedConditions.visibility_of_element_located(By.xpath("//div[@class='scrollable-content']/div[@class='grid-view-drop-area ng-star-inserted' and starts-with(@id, 'grid-row')]")));
    
...