如何使用硒在表格中找到工具提示<a href="">tooltip</a>的值

时间:2019-05-26 10:18:31

标签: java selenium-webdriver

从这边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工具提示值,例如President = Xi jinping,Capital = Beijing,official script =简体中文等。但显示错误。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 :(得分:0)

如果看到正在使用的xpath和给定页面的HTML代码,则该表的第一行(tr)具有表头(th),从第二行开始,表数据(td),但不是。这就是原因,您正在为第一个索引获取文本,并从第二个索引开始获取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])将起作用。但是对于第二个索引(// [@ id =“ mw-content-text”] / div / table [1] / tbody / tr [2]),我们使用td而不是th。有问题。

您可以根据上述说明更改xptah(我已经检查了HTML的相同性,并观察到某些具有th,而某些具有td。在这种情况下,根本不可能使用相同的xpath来获取所有元素数据。唯一可行的方法是单独编写xpath或将所有th和td分开并使用if条件运行循环。