提问者:小点点

如何使用Selenium和Java识别<a>中的文本


这是我要测试的演示商店的代码:

 <li class="level0 nav-2 parent">
      <a href="http://demo-store.seleniumacademy.com/men.html" 
               class="level0 has-children">Men</a> 
        <ul class="level0">
            <li class="level1 view-all">
               <a class="level1" href="http://demo- 
                         store.seleniumacademy.com/men.html">View All 
                         Men</a>
            </li>
               <li class="level1 nav-2-1 first"><a></a></li>
               <li class="level1 nav-2-2"><a href="http://demo- 
                          store.seleniumacademy.com/men/shirts.html" 
                          class="level1">text to get</a> 
               </li>
               <li class="level1 nav-2-3"><a></a></li>
         </ul>
    </li>

我想获取这些子类别的文本,以便以后可以使用链接元素中的文本单击特定类别。我的代码是:

public Subcategory openSubcategory (String subcategoryName){

    List<WebElement> subcategories = driver.findElements(By.cssSelector("a.level1"));

    for (WebElement element: subcategories) {
        if (element.getText().equals(subcategoryName)){
            element.click();
            break;
        }
    }
    return new Subcategory(driver);
}

但它不会进入循环,可能是因为element. getText()为空。


共2个答案

匿名用户

要首先单击带有文本作为衬衫的WebElement,您必须将鼠标悬停在带有文本的元素上,因为Man诱导WebDriver等待可见性OfElement定位,您可以使用以下定位器策略:

public Subcategory openSubcategory (String subcategoryName){

    WebElement menuMen = new WebDriverWait(driver, 10).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//a[contains(@class,'has-children') and text()='Men']")));
    new Actions(driver).moveToElement(menuMen).build().perform();
    List<WebElement> subcategories = driver.findElements(By.xpath("//a[contains(@class,'has-children') and text()='Men']//following::ul[1]//li/a"));
    for (WebElement element: subcategories) {
        if (element.getText().equals(subcategoryName)){
            element.click();
            break;
        }
    }
    return new Subcategory(driver);
}

匿名用户

Element. getText()可以为空。

尝试:

element.getAttribute("value");
// or
element.getAttribute("innerHTML");

将您的CSS更改为:

"a[class*='level']";
// or
"a[]";

调试代码,检查元素是否不为空