Получить текст между тегами <input> - PullRequest
0 голосов
/ 17 мая 2018

Как я могу получить значение между тегами. Вот этот HTML ... Значение флажков нужно хранить в списке.

<div class="rcbScroll rcbWidth" style="height:180px;width:100%;">
   <div class="rcbCheckAllItems"><input type="checkbox" class="rcbCheckAllItemsCheckBox">Check All</div>
   <ul class="rcbList" style="list-style:none;margin:0;padding:0;zoom:1;">
      <li class="rcbHovered "><input type="checkbox" class="rcbCheckBox">Dallas , Wanda</li>
      <li class="rcbItem "><input type="checkbox" class="rcbCheckBox">Parker , Tina</li>
      <li class="rcbItem "><input type="checkbox" class="rcbCheckBox">Plano , Samantha </li>
      <li class="rcbItem "><input type="checkbox" class="rcbCheckBox">Richardson , Christina</li>
      <li class="rcbItem "><input type="checkbox" class="rcbCheckBox">Dave , Test</li>
      <li class="rcbItem "><input type="checkbox" class="rcbCheckBox">clinician , test</li>
      <li class="rcbItem "><input type="checkbox" class="rcbCheckBox">Smith , Jasmin</li>
   </ul>
</div>

Пожалуйста, помогите мне найти код. Обязательный язык JAVA.

Мой пример кода: -

List<WebElement> eles = driver.findElements(By.cssSelector("ul.rcbList > li"));

List<String> txts = new ArrayList<String>();
String script = "return arguments[0].lastChild.nodeValue;";
JavascriptExecutor js = (JavascriptExecutor) driver;
Boolean stale = true;
for (WebElement ele : eles) {
    try {
        WebElement webEle = ele.findElement(By.className("rcbCheckBox"));
        if (webEle.getText().equals(sheetValue)) {
            String text = (String) js.executeScript(script, ele);
            txts.add(text.toString());
            String txt = text.toString();
            for (String texts : txts) {
                System.out.println("Print----------> " + texts);
            }
            Thread.sleep(3000);
            // if (text.equals(sheetValue)) {
            System.out.println("inside if" + webEle.getText().equals(sheetValue));
            ele.findElement(By.tagName("input")).click();
            ;
        } // ele.click();
        stale = false;
    } catch (StaleElementReferenceException e) {
        stale = true;
    }
}    

Я застрял здесь и сейчас.

Ответы [ 6 ]

0 голосов
/ 17 мая 2018

Пожалуйста, попробуйте это, и это будет работать.

List<WebElement> elementList=driver.findElements(By.xpath("//ul[@class='rcbList']/li"));
List<String> valueList=new ArrayList<String>();

int size=elementList.size();

for(int i=0;i<size;i++){
    valueList.add(elementList.get(i).getText());
}
0 голосов
/ 17 мая 2018

С объяснением в вопросе и просмотром других ответов, я думаю, вам нужно содержимое HTML между тегами HTML, то есть -

  • Отметить все
  • Даллас, Ванда
  • Паркер, Тина
  • Ричардсон, Кри
  • Дейв, Тест
  • клиницист, тест
  • Смит, Жасмин

Чтобы получить вышеуказанное содержимое HTML, попробуйте использовать следующий код Java.

Java-код

final String regex = "(>\\w+((\\s\\W\\s)|(\\W)|(\\s))\\w+<)|(>\\w+<)";
final String string = "<div class=\"rcbScroll rcbWidth\" style=\"height:180px;width:100%;\">" +
    "<div class=\"rcbCheckAllItems\"><input type=\"checkbox\" class=\"rcbCheckAllItemsCheckBox\">Check All</div>" +
    "<ul class=\"rcbList\" style=\"list-style:none;margin:0;padding:0;zoom:1;\">" +
    "<li class=\"rcbHovered \"><input type=\"checkbox\" class=\"rcbCheckBox\">Dallas , Wanda</li>" +
    "<li class=\"rcbItem \"><input type=\"checkbox\" class=\"rcbCheckBox\">Parker , Tina</li>" +
    "<li class=\"rcbItem \"><input type=\"checkbox\" class=\"rcbCheckBox\">Plano , Samantha </li>" +
    "<li class=\"rcbItem \"><input type=\"checkbox\" class=\"rcbCheckBox\">Richardson , Christina</li>" +
    "<li class=\"rcbItem \"><input type=\"checkbox\" class=\"rcbCheckBox\">Dave , Test</li>" +
    "<li class=\"rcbItem \"><input type=\"checkbox\" class=\"rcbCheckBox\">clinician , test</li>" +
    "<li class=\"rcbItem \"><input type=\"checkbox\" class=\"rcbCheckBox\">Smith , Jasmin</li>" +
    "<li class=\"rcbItem \"><input type=\"checkbox\" class=\"rcbCheckBox\">Smith,Jasmin</li>" +
    "<li class=\"rcbItem \"><input type=\"checkbox\" class=\"rcbCheckBox\">SmithJasmin</li>" +
    "</ul></div>";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

ArrayList<String> innerHTML = new ArrayList<>();

while (matcher.find()) {
    String html = matcher.group(0);
    html = html.substring(1, html.length()-1);
    System.out.println("Full match: " + html);
    // Now you have all the value in between tags in this ArrayList called innerHTML
    innerHTML.add(html);
}

Пример вывода

Full match: Check All
Full match: Dallas , Wanda
Full match: Parker , Tina
Full match: Richardson , Christina
Full match: Dave , Test
Full match: clinician , test
Full match: Smith , Jasmin

Теперь вы можетеполучить доступ к этому HTML-контенту, просматривая innerHTML ArrayList.Надеюсь, это помогло.

0 голосов
/ 17 мая 2018

Текст в теге является типом TextNode, а не ElementNode.API поиска Selenium может возвращать только ElementNode из дерева HTML DOM.

Чтобы получить доступ к TextNode, вы должны использовать JavaScript через driver.executeScript() следующим образом:

List<WebElement> eles = driver.findElements(By.cssSelector("ul.rcbList > li"));

List<String> txts = new ArrayList<String>();
String script = "return arguments[0].lastChild.nodeValue;";
JavascriptExecutor js = (JavascriptExecutor) driver;
int length = eles.size();

for(int i=0;i<length;i++) {
    WebElement ele = eles.get(i);
    String text = (String) js.executeScript(script, ele);
    if(text.equals(sheetValue)) {
       ele.findElement(By.cssSelector('input')).click();
       txts.add(text);
       // find all li again on page after click,
       // seems each click on checkbox caused page DOM tree changed
       eles = driver.findElements(By.cssSelector("ul.rcbList > li"));
    }

}

Или вы можете найтиElementNode родительского элемента TextNode, и получить весь текст родительского, а затем извлечь частичный текст из всего текста.

0 голосов
/ 17 мая 2018

Попробуйте:

   List<WebElement> checkboxes=driver.findElements(By.xpath("//ul[@class='rcbList']/li"));
   for (WebElement checkbox: checkboxes) {
   System.out.println(checkbox.getText());
0 голосов
/ 17 мая 2018

Это вернет список Webelements

   driver.FindElement(By.XPath("html/body/div[1]/ul"));
0 голосов
/ 17 мая 2018

С помощью getText() вы можете получить innerText WebElement.Поскольку у вас нет текста в теге <input>, я думаю, вы хотите получить атрибуты?Если вы хотите Атрибуты вашего WebElement, вы можете использовать getAttribute().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...