#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 вам необходимо развернуть элемент, чтобы выполнить действие над элементом