Не удается найти теневой элемент

#html #css #selenium #selenium-webdriver

#HTML #css #селен #selenium-webdriver

Вопрос:

Попробуйте получить атрибут теневого элемента, но получите ElementNotVisibleException Element with CSS input[type='checkbox'] is not present on screen

 <checkbox _ngcontent-ebv-c14="" label="User Access" ng-version="8.0.3" class="ng-star-inserted">
  #shadow-root(open)
    <label>
      <input type="checkbox" name="" value="true">
      <span class="checkmark"></span>
      <!---->
      <span class="label">User Access</span>
   </label>
</checkbox>
  

Использование Selenium для получения атрибута элемента

 WebElement parentElement = webdriver.findElement(By.xpath("//checkbox[@label='User Access']"));
webdriver.getShadowElement(parentElement,"input[type='checkbox']").getAttribute("value").contains("true");
  

Я что-нибудь пропустил?

Комментарии:

1. Можете ли вы сначала проверить, виден ли элемент или нет, прежде чем пытаться получить атрибут

2. С какого веб-сайта он взят.

Ответ №1:

Я решаю свою проблему следующим образом

 public class test {
    WebDriver driver;
    public WebElement maximizerootelement(WebElement retelement) {
        WebElement ele = (WebElement) ((JavascriptExecutor) driver)
                .executeScript("return arguments[0].shadowRoot",retelement);
        return retelement;
    }

    @Test
    public void mytest() {
        driver.get("https://yourlin");
        WebElement root1 = driver.findElement(By.tagName("//checkbox[@label='User Access']"));
        WebElement shadowRoot = maximizerootelement(root1);
        String actualHeading = shadowRoot.findElement(By.cssSelector("input[type='checkbox']")).getText();
        Assert.assertEquals("true", actualHeading);


    }
}
  

С помощью javascript executor вам необходимо развернуть элемент, чтобы выполнить действие над элементом