Как найти новый элемент, недавно добавленный на веб-страницу динамически после перетаскивания в селене? - PullRequest
0 голосов
/ 06 февраля 2019

enter image description here

В настоящее время я работаю над веб-страницей, на которой есть компоненты rappid js.Я пытаюсь добиться перетаскивания элементов из палитры, как показано на скриншоте, в сетку.Элемент, который я перетаскиваю из палитры, может быть идентифицирован по его идентификатору модели.В тот момент, когда я удаляю элемент, его копия создается в сетке, меняется ее идентификатор модели.Идентификатор, видимый в домене, также добавляется динамически.В сетке будет несколько элементов, которые имеют те же атрибуты, что и на снимке экрана.

Как найти этот элемент уникально и динамически?

Я пытался использовать Sikuli, но это не такне поможет, так как будет несколько похожих элементов.Я могу получить все элементы в сетке, используя findElements (), но не могу сравнить недавно удаленный элемент.Все, чего я пытаюсь добиться, - это найти элемент уникальным образом после того, как он будет добавлен в сетку, чтобы я мог в дальнейшем выполнять над ним операции.

Можем ли мы обратить вспять процесс поиска элемента?из расположения курсора мыши найти элемент?

enter image description here

1 Ответ

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

Существует два способа получить последний добавленный элемент:

  1. Из структуры div, упомянутой на скриншоте, я вижу, что атрибут "id" увеличивается как "j_57 "и" j_59 ", поэтому каждый новый элемент на странице будет иметь идентификатор после его добавления на страницу.

    Итак, что вы можете сделать здесь, это то, что вы можете получить список идентификаторов и получить последний элемент непосредственно перед добавлением вашего элемента на веб-страницу, а затем снова получить список идентификаторов и проверить последний элемент, этот элемент будетэлемент, который вы добавили на страницу, и вы можете проверить его, проверив его номер "j_", который он увеличил с последнего значения.

  2. Если добавленный в данный момент элемент добавляется в последнюю из структуры div, вы можете выполнить перетаскивание и напрямую получить последний элемент, используя xpath //g.

Код для 1-й точки должен быть таким:

    //Fetch the elements before doing the operation
    List<WebElement> elements = driver.findElements(By.xpath("//g[contains(@id,'j_')]"));
    // You would be getting the last value present by using getAttribute
    String lastElement = elements.get(elements.size()-1).getAttribute("id");

    //Perform the drag and drop operation now

    //Fetch the elements again
    List<WebElement> newElements = driver.findElements(By.xpath("//g[contains(@id,'j_')]"));
    // Fetch the id attribute again and verify that the j count has incremented and then you can fetch the last element, which is your new element now 
    String newLastElement = newElements.get(elements.size()-1).getAttribute("id");
    // Your new element can be found using
    WebElement requiredElement = newElements.get(elements.size()-1);
    String modelId = requiredElement.getAttribute("model-id");

Код для 2-й точки должен быть следующим:

    //Perform the drag and drop and then fetch the element list
    List<WebElement> elementList = driver.findElements(By.xpath("//g"));
    // Fetching the last element in the list        
    WebElement lastElement = elementList.get(elementList.size()-1);
    String modelId = lastElement.getAttribute("model-id");

Оба способа верны, если ваши значения j_ увеличиваются при добавлении элементов, тогда вы можете быть уверены в новом элементе, проверив увеличенное значение j_ из первого подхода.Иначе второй подход короток и приятен, и он тоже подойдет.

...