Как поместить строку с тегами HTML в массив или список? - PullRequest
1 голос
/ 02 мая 2019

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

Например, строка, поступающая из базы данных:

<dl style="float: left; text-align: left; width: 50%;">
 <dt>
     Note1amp;M
 </dt>
 <dd>
     - This is an example
 </dd>
 <dt>
     Note2
 </dt>
 <dd>
     - Example 2
 </dd>
 <dt>
     Note 3
 </dt>
 <dd>
      - This is example 3
 </dd>

Текст из пользовательского интерфейса:

Note1 - This is an example

, где Note1 - этоодин элемент

Это пример другого элемента

Пока что я должен удалить теги и попытаться поместить в список

public String[] verifyData(Strint txtFromDB) {
        String[] txt = new String[3];
        boolean compareValue1 = false, compareValue2 = false;
        boolean boolBack = false;
        WebElement abbreviation = driver.findElement(By.xpath(itemLocatorP1));
        WebElement fullName = driver.findElement(By.xpath(itemLocatorP2));
        String p1, p2;

        if((abbreviation.isDisplayed()) && (fullName.isDisplayed())) {
            try {
                getMenu().scroll_To_View_Web_Element(itemLocatorP1);
                p1 = getUITxt(itemLocatorP1); // getting a text from the UI;
                getMenu().scroll_To_View_Web_Element(itemLocatorP2);
                p2 = getUITxt(itemLocatorP2); // getting the second part text from the UI: 
                txt[0] = p1; //  Note 1
                txt[1] = p2; // - This is an example

                System.out.println("Array txt -> " + txt[0]);
            }
            catch(Exception e) {
                txt[0] = "Blank";
                System.out.println("Array txt Exception-> " + txt[0]);
            }
            // removing some html txt from the txtFromDB so that it can match with the UI
            txtFromDB = txtFromDB.replaceAll("<dt>", "");
            txtFromDB = txtFromDB.replaceAll("</dt>", "");
            txtFromDB = txtFromDB.replaceAll("<dd>", "");
            txtFromDB = txtFromDB.replaceAll("</dd>", "");
            txtFromDB = txtFromDB.replaceAll(">", "");
            txtFromDB = txtFromDB.replaceAll("</dl>", "");
            txtFromDB = txtFromDB.replaceAll("</dl", "");
            txtFromDB = txtFromDB.replaceAll("<dl style=", "");
            txtFromDB = txtFromDB.replaceAll("float: left; text-align: left; width: 50%;", "");
            txtFromDB = txtFromDB.replaceAll("\"\"", "");
            txtFromDB = txtFromDB.replaceAll("&nbsp;", " ");
            txtFromDB = txtFromDB.replaceAll("amp;", "");
            txtFromDB = txtFromDB.replaceAll("&nbsp;", " ");
            txtFromDB = txtFromDB.replaceAll("&rsquo;s", "’s");
            txtFromDB = txtFromDB.replaceAll("&ndash;", "–");
            txtFromDB = txtFromDB.replaceAll("(?m)^[ \t]*\r?\n", "");
            System.out.println("DB Txt -> " + txtFromDB);

            String[] temp = txtFromDB.split("\\n");

            for(String x : temp) {
                System.out.println(x);
                if((x.contains(txt[0])) && (x.contains(txt[1]))) {
                    System.out.println(x + " from DB matches the UI -> " + txt[0] + txt[1]);
                    compareValue1 = true;
                    break;
                }
                else {
                    System.out.println("Still Searching.....");
                }
            }

            if(compareValue1 ) 
                boolBack = true;
            else
                boolBack = false;
        }
        else {
            System.out.println("No such element was found in the page");
            txt[0] = "Blank";
            boolBack = false;
        }
        txt[2] = Boolean.toString(boolBack);
        return txt;
        }

Итак, что я хочуdo помещает <dt>Note1</dt> and <dd>-This is an example</dd> в виде одной строки, например: Note 1 - This is an example, в список или массив, чтобы я мог сравнить их с любыми данными в пользовательском интерфейсе.

Ответы [ 2 ]

2 голосов
/ 02 мая 2019

С JSoup

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

https://en.wikipedia.org/wiki/Jsoup

С помощью JSoup вы можете удалить все html и получить текст:

String html = "<p>example</p>";
Document doc = Jsoup.parse(html);
System.out.println(doc.text()); // doc.text() returns the text only from the html

Это приведет к выводу:

example

С помощью JSoup вы также можете найти элементы с определенным идентификатором, чтобы их было легче разделить.

String html = "<dt>example</dt>";
Document doc = Jsoup.parse(html);
Elements dts = doc.getElementsByClass("dt");
0 голосов
/ 02 мая 2019

Как-то разобрался, разбил строку на две строки, затем сохранил ее в списке и проверил, содержится ли в этом списке элемент, который мне нужно проверить

public void verifyEachCommonAcronymsAndAbbreviationsForAPB(String itemLocatorP1, String itemLocatorP2, String txtFromDB) {
        String[] txt = new String[3];
        boolean compareValue1 = false, compareValue2 = false;
        WebElement abbreviation = driver.findElement(By.xpath(itemLocatorP1));
        WebElement fullName = driver.findElement(By.xpath(itemLocatorP2));
        String p1, p2;

        if((abbreviation.isDisplayed()) && (fullName.isDisplayed())) {
            try {
                getMenu().scroll_To_View_Web_Element(itemLocatorP1);
                p1 = getUITxt(itemLocatorP1);
                getMenu().scroll_To_View_Web_Element(itemLocatorP2);
                p2 = getUITxt(itemLocatorP2);
                txt[0] = p1;
                txt[1] = p2;
            }
            catch(Exception e) {
                txt[0] = "Blank";
                System.out.println("Array txt Exception-> " + txt[0]);
            }
            // removing some html txt from the txtFromDB so that it can match with the UI
            txtFromDB = txtFromDB.replaceAll("<dt>", "");
            txtFromDB = txtFromDB.replaceAll("</dt>", "");
            txtFromDB = txtFromDB.replaceAll("<dd>", "");
            txtFromDB = txtFromDB.replaceAll("</dd>", "");
            txtFromDB = txtFromDB.replaceAll(">", "");
            txtFromDB = txtFromDB.replaceAll("</dl>", "");
            txtFromDB = txtFromDB.replaceAll("</dl", "");
            txtFromDB = txtFromDB.replaceAll("<dl style=", "");
            txtFromDB = txtFromDB.replaceAll("float: left; text-align: left; width: 50%;", "");
            txtFromDB = txtFromDB.replaceAll("\"\"", "");
            txtFromDB = txtFromDB.replaceAll("&nbsp;", " ");
            txtFromDB = txtFromDB.replaceAll("amp;", "");
            txtFromDB = txtFromDB.replaceAll("&nbsp;", " ");
            txtFromDB = txtFromDB.replaceAll("&rsquo;s", "’s");
            txtFromDB = txtFromDB.replaceAll("&ndash;", "–");
            txtFromDB = txtFromDB.replaceAll("(?m)^[ \t]*\r?\n", "");
            //System.out.println("DB Txt -> " + txtFromDB);

            String[] splitArrDB = txtFromDB.split("\\n");

            List<String> acronymsList = new ArrayList<>();

            for(int i = 0 ; i < splitArrDB.length; i++) {
                acronymsList.add(splitArrDB[i] + splitArrDB[i]);
            }


            for(String temp : acronymsList) {
                if((temp.contains(txt[0]))) {
                    System.out.println("Found " + txt[0] + " in the list");
                    compareValue1 = true;
                    break;
                }
                //System.out.println("still searching.....");
            }

            for(String x : acronymsList) {
                if((x.contains(txt[1]))) {
                    System.out.println("Found " + txt[1] + " in the list");
                    compareValue1 = true;
                    break;
                }
                //System.out.println("still searching.....");
            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...