Элемент проверки выбран; Не могу найти уникальный элемент - PullRequest
0 голосов
/ 21 июня 2019

Я не могу найти уникальный элемент для проверки, если этот элемент выбран.Нужна помощь. см. Прикрепленное изображение для возможных элементов.

   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 голосов
/ 21 июня 2019
  1. Вы можете использовать функцию XPath contains() для соответствия активному theme-item.
  2. Когда вы закончите, вы можете использовать descendant ax , чтобы найти его потомка a element
  3. Лучше использовать WebDriverWait , чтобы гарантировать, что элемент действительно присутствует и может взаимодействовать с

Собираем все вместе:

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

В дальнейшем, пожалуйста, избегайте публиковать HTML DOM в качестве изображения, шанс получить хороший ответ будет намного выше, если вы добавите код вместо этого.

0 голосов
/ 21 июня 2019

Вместо использования идентификатора класса, вы можете перейти к тексту ссылки, если ваш текст постоянен.

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(). Таким образом, вы можете проверить, выбран ли ваш вариант или нет

0 голосов
/ 21 июня 2019
  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(); 
    
0 голосов
/ 21 июня 2019

вы можете попробовать с приведенным ниже xpath.

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