Selenium通过在其间跳过标签来获得价值

时间:2013-12-20 09:35:06

标签: java selenium selenium-webdriver

这是来自Redbus.in网站

我想要做的是提取旅行列表并将其存储在列表中..但我无法从中获得确切的值。

<div id="t1-trvDiv" class="trvDiv" style="display: block;"> 
   <ul id="t1-travListing" class="ul-listing">
     <li id="t1-travls-0">
     <li id="t1-travls-1">
       <a title="National Travels" title1="1" onclick="bindTrav("t1",1);">
         <span class="tickSelected"></span>
         National Travels
       </a>
     </li>
     <li id="t1-travls-2">
       <a title="Seabird Tourists" title1="2" onclick="bindTrav("t1",2);">
         <span class="tickSelected"></span>
         Seabird Tourists
       </a>
     </li>
     <li id="t1-travls-3">
       ...
     </li>

这是我以前用来至少打印第一个值的java代码..

List<WebElement> allElements = driver.findElements(By.xpath("//ul[@id='t1-travListing']/li"));
int i=0;
allElements.remove(allElements.size()-1);
for (WebElement element: allElements) {
    System.out.println(driver.findElement(By.xpath("//li[@id='t1-travls-0']/a/")).getText());        
}

由于标签后面有span标签,我不知道如何跳过它并从中获取值

3 个答案:

答案 0 :(得分:0)

您可以使用xpath直接选择节点:

//ul[@id = 't1-travListing']/li/a

将它与findElements一起使用,它将返回li-tags中所有a-Tags的列表。 Selenium的getText应该会显示所显示的文本,单独执行“span”标签的“跳过”:

List<WebElement> allElements = driver.findElements(By.xpath("//ul[@id = 't1-travListing']/li/a"));

for (WebElement element: allElements) {
    System.out.println(element.getText());        
}

您也可以尝试这样的表达式来选择不是元素,而是选择其中的文本:

//ul[@id = 't1-travListing']/li/a/text()

答案 1 :(得分:0)

请试试这个。这应该有用。

List<WebElement> allElements = driver.findElements(By.xpath("//ul[@id='t1-travListing']/li"));
int i=0;
allElements.remove(allElements.size()-1); // not sure why are you doing this
for (WebElement element: allElements) {
    System.out.println(element.findElements(By.xpath("./a")).getText());        
}

答案 2 :(得分:0)

这对你也有用

List<WebElement> allElements = driver.findElements(By.xpath("//*[contains(@id,'t1-travls')]"));
            for (WebElement element: allElements) {
                System.out.println(element.getText());        
            }

List<WebElement> allElements = driver.findElements(By.cssSelector("a[onclick*='bindTrav']"));
            for (WebElement element: allElements) {
                System.out.println(element.getAttribute("title"));        
            }