Как найти значения всплывающей подсказки </a> внутри таблицы, используя селен - PullRequest
0 голосов
/ 26 мая 2019

с этой стороны https://en.wikipedia.org/wiki/China

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

Я сохранил значения заголовка и пытаюсь сопоставить заголовок таблицы и получить значения столбца, но с ошибкой.

List<String> search=new ArrayList<String>();
                 search.add("President");
                 search.add("Capital");
                 search.add("Dialing code");
                 search.add("Currency");
                 search.add("Population");
                 search.add("Official script");                 
                        for(int ii=0;ii<search.size();ii++) {
                            System.out.print("VALUE in search list ; "+search.get(ii));
                             for(int i=1;i<43;i++) {

                              String ss=driver.findElement(By.xpath("//*[@id=\"mw-content-text\"]/div/table[1]/tbody/tr["+i+"]/th[1]")).getText();
                             System.out.println(" VALUE in ss ; "+ss+" tr["+i+"]");
                            if(ss.toLowerCase().contains(search.get(ii).toLowerCase())) {
                            System.out.println("value matched");
                            //WebElement web= driver.findElement(By.xpath("//*[@id=\"mw-content-text\"]/div/table[1]/tbody/tr["+i+"]/td/a"));
                            //String title=web.getAttribute("title");
                            //System.out.println(title);
                            break;
                        }
                 }

            }

мне нужно получить значения всплывающей подсказки hrefкаждой колонки, например, Президент = Си Цзиньпин, Столица = Пекин, официальный сценарий = упрощенный китайский и т. д., но показывающий ошибку. Exception in thread "main" org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//*[@id="mw-content-text"]/div/table[1]/tbody/tr[2]/th[1]"}

1 Ответ

0 голосов
/ 27 мая 2019

Если вы видите xpath, который вы используете, и HTML-код для той же страницы, что вы дали, первая строка (tr) таблицы имеет заголовок таблицы (th), а со второй строки и далее мы имеем данные таблицы (тд), но не тд. По этой причине вы получаете текст для первого индекса и получаете исключение NoSuchElementException от второго индекса. Вы можете изменить свой xpath таким образом, чтобы он обрабатывал, где всегда находится заголовок таблицы и где есть данные таблицы. Это поможет вам получить данные.

Этот xpath (// [@ id = "mw-content-text"] / div / table [1] / tbody / tr) дает 55 соответствующих элементов. Если вы примените // [@ id = "mw-content-text"] / div / table [1] / tbody / tr [1], он будет соответствовать первому элементу, и у этого элемента будет 'th'. т.е. (// [@ id = "mw-content-text"] / div / table [1] / tbody / tr [1] / th [1]) будет работать. Но для 2-го индекса (// [@ id = "mw-content-text"] / div / table [1] / tbody / tr [2]) у нас есть td вместо th. Есть проблема.

Вы можете изменить свой xptah на основе приведенного выше объяснения (я проверил HTML на то же самое и заметил, что некоторые имеют th, а некоторые с td. В этих случаях выборка данных всех элементов с одинаковым xpath невозможна вообще. Единственно возможный способ - написать xpath по отдельности или разделить все th и td и запустить цикл с условием if).

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