>source

일부 html 태그가 있고 하나의 문자열에 여러 데이터가있는 문자열이 있습니다. UI의 요소가 해당 문자열에 있는지 확인해야합니다. 태그를 제거 할 수 있었지만 비교하기 쉽도록 문자열을 배열 또는 목록으로 변환하는 방법을 잘 모르겠습니다.

예를 들어, 데이터베이스에서 오는 문자열은 다음과 같습니다.

<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>

UI의 텍스트는

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;
        }

내가하고 싶은 것은 <dt>Note1</dt> and <dd>-This is an example</dd>  하나의 문자열로 : Note 1 - This is an example  UI의 모든 데이터와 비교할 수 있도록 목록 또는 배열로 표시합니다.


  • 답변 # 1

    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을 사용하면 특정 ID를 가진 요소를 쉽게 분리 할 수 ​​있습니다.

    String html = "<dt>example</dt>";
    Document doc = Jsoup.parse(html);
    Elements dts = doc.getElementsByClass("dt");
    
    

  • 답변 # 2

    그것을 알아 내고 문자열을 이중선을 기준으로 분할 한 다음 목록에 저장하고 확인해야하는 요소가 해당 목록에 포함되어 있는지 확인

    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.....");
                }
    
    

  • 이전 python - 인식하지 못하는 날짜 시간 문자열을 시간대가있는 인식 날짜 시간 객체로 변환하는 방법은 무엇입니까?
  • 다음 excel - 위의 여러 행이있는 수식을 추가하는 매크로