验证元素已选中;找不到唯一元素

时间:2019-06-21 03:23:50

标签: java selenium automation xtend

我找不到唯一元素来验证是否选择了该元素。需要帮忙。 see attached image表示可能的元素。

   var attr = findElement(By.xpath("//theme-item[@class='list-group-item 
   xpath-themes-list-item active ng-star-inserted']")).getText()
            log("!!")
                if (attr.contains("Infor M3A Theme"))
                {

  Assert.assertTrue(findElement(By.xpath("//theme-item[@class='list-group- 
  item xpath-themes-list-item active ng-star-inserted']")).isSelected, 
  "Incorrect Theme selected")
                    log("Infor M3A Theme Selected")
                    findElement(By.xpath("//* 
   [text()='back']")).click

   driver.findElement(By.xpath("//button[@aria-label='Close Global 
   Navigation' and contains(@data-title,'CLOSE')]")).click();

                }
                else
                {
                    Assert.fail("Theme Validation failed")
                }

如果我可以通过使用具有活动性的元素类来真正确保选择该元素,因为它是一个很好的标识符,那么它会更好

4 个答案:

答案 0 :(得分:0)

您可以尝试使用以下xpath。

//theme-item[contains(@class,'list-item active')]//a

答案 1 :(得分:0)

如果您的文本恒定,则可以使用linktext而不是使用类标识符。

driver.findElement(By.linktext(" *** M3A Theme"));

或者您可以直接搜索这样的文本

driver.finElement(By.xpath("//a[@text='*** M3A Theme']"));

如果您的文本不是恒定的,则可以使用xpath来包含文本

driver.findElement(By.xpath("//*[text()[contains(.,'M3A Theme')]]"));

注意:

要获取课程:

driver.findElement(By.cssSelector("theme-item[class = 'list-group-item 
xpath-themes-list-item active']"));

我相信您的班级名称是动态的,所有元素的名称均为list-group-item xpath-themes-list-item,一旦单击任何选项,班级名称将更改为list-group-item xpath-themes-list-item active

因此,要验证是否选择了该选项,请首先使用linktext单击。然后,使用我提供的上述定位器,并检查isDisplayed()。通过这种方式,您可以验证是否选择了您的选项

答案 2 :(得分:0)

  1. 查找包含突出显示主题的父元素

    List<WebElement> parent = driver.findElements(By.cssSelector(".list-group-item.
    xpath-themes-list-item.active"));
    
  2. 查找子元素,即在父元素内标记“ a”

    WebElement themeElement = parent.findElement(By.tagName('a'));
    
  3. 查找主题名称

    themeElement.getText(); 
    

答案 3 :(得分:0)

  1. 您可以使用XPath contains()函数来匹配活动的theme-item
  2. 完成后,您就可以利用descendant axe来找到其子元素a
  3. 最好使用WebDriverWait,以确保元素确实存在并可以与之交互

将所有内容放在一起:

new WebDriverWait(driver, 10)
        .until(ExpectedConditions
                .elementToBeClickable(By.xpath("//theme-item[contains(@class,'active')]/descendant::a")))
        .click();

今后,请避免将HTML DOM作为图像发布,如果您添加代码,则获得良好响应的机会会大得多。