Перейти к содержимому

Choson

Регистрация: 22 окт 2019
Offline Активность: 27 авг 2023 08:50
-----

Мои сообщения

В теме: selenium + java. Ожидание загрузки.

24 мая 2021 - 10:27

 

Для этого во втором ожидании нужно просто поменять локатор на что-то вида

By.xpath("//table[2][text()='RUR']"))

Вопрос немного в другом: table2 - как WebElement.

Как мне кажется решение: wait.until(ExpectedConditions.textToBePresentInElement(table2, "RUR"));

Пропустил этот метод в списке, когда искал в стандартных методах.

Спасибо за участие!


В теме: selenium + java. Ожидание загрузки.

24 мая 2021 - 08:04

Данные во второй таблице такие же как и в первой. Поэтому не получится поменять просто текст ожидания для решения данной задачи.

Сейчас пользуюсь Кастомным методом ожидания, который ждет появление текста во второй таблице. Но может я его зря написал, и есть стандартный метод селениума, где можно задать вэб элемент в котором нужно ждать появление ожидаемого текста?

 

Скорее всего, можно. А в чем собственно проблема? Почему не использовать тот же подход для второй таблицы, возможно изменив условие?


В теме: selenium + java или python. общий ближайший предок у двух элементов

24 декабря 2020 - 16:14

 

Лучше всего это сделать не путём построения XPath, а использовать executeScript, чтобы выполнить кусочек кода, который ищет общий родительский элемент:

var element1 = driver.findElement(By.cssSelector("li.category-1"));
var element2 = driver.findElement(By.cssSelector("div#box-latest-products li.product"));
var findCommonAncestor = """
  function ancestors (node) { let n = node; const l = [];
  while (n && n.ownerDocument) { l.unshift(n); n = n.parentNode } return l };
  let l1 = ancestors(arguments[0]); let l2 = ancestors(arguments[1]);
  let result;
  for (let i = 0; i < l1.length; i++) { if (l1[i] === l2[i]) { result = l1[i] } else break };
  return result
  """;
var element = (WebElement) driver.executeScript(findCommonAncestor, element1, element2);

 

Почему лучше? у меня код получился раза в 2 больше, но там и поиск идет в листе листов элементов. Вопрос от кодера на java с опытом около 3-х недель.


В теме: selenium + java или python. общий ближайший предок у двух элементов

24 декабря 2020 - 16:06

Игорь извините мое любопытство а какой use case ? или академичеккий интерес ? 

Одностраничное вэб приложение, из которого открываются около 100 различных форм. Каждая форма как отдельная страница. Привязываться к атрибутам элементов не могу, поэтому привязываюсь к текстам. На каждой форме  нахожу уникальный текст = уникальный элемент, нахожу второй текст (элемент) так, чтобы общий предок был элементом нужной формы. далее остальные элементы формы нахожу внутри формы (тоже стараюсь по тексту). если в нужной форме есть повторяющиеся тексты ("редактировать", "ОК", и т.д.), то каким же образом нахожу блок в нужным текстом и из него уже нахожу нужный элемент с текстом.

Надеюсь понятно изложил.

В предыдущем посте я описал метод немного по другому.


В теме: selenium + java или python. общий ближайший предок у двух элементов

22 декабря 2020 - 08:51

Спасибо за ответ, но я проверил как записываются предки элемента в list. Поэтому выбрал такой вариант: 1. нахожу предков у элементов; 2. нахожу общих предков; 3. по любому списку предков ищу максимальный индекс из совпадений со списком общих предков. 2 и 3 пункты можно объединить - 2 вложенных цикла (индексы с концов списков), внутри условие сравнения элементов и выход из обоих циклов по первому совпадению.