Произошла ошибка при попытке доступа к теневому DoM Ele mnet с использованием JavascriptExecutor в селене - PullRequest
0 голосов
/ 12 февраля 2020

Проект, над которым я работал, использует полимерную среду Google, которая создает теневые элементы DOM. При попытке создать автоматический тест с использованием Selenium я застрял, поскольку инструмент Selenium не смог найти элементы под теневым DOM. В результате поиска в Google я обнаружил, что JavascriptExecutor можно использовать в качестве решения. Однако каждый раз, когда я пытаюсь получить доступ к дереву Shadow DOM одна и та же ошибка случается некоторое время, и некоторое время ее работа отлично . Я не могу понять, что происходит. Это дерево DOM, к которому я пытаюсь получить доступ,

The Dom tree I try to access

Код, который я использую для доступа,

@Test
public void testGetText_FromShadowDOMElements() {

    WebElement x1 = driver.findElement(By.tagName("main-app"));     
    WebElement y1 = expandRootElement(x1);
    System.out.println(x1.getTagName()+"----------------- "+y1);

    WebElement x2 = y1.findElement(By.cssSelector("popup-dialog#popup-dialog.popup-dialog"));
    WebElement y2 = expandRootElement(x2);
    System.out.println(x2.getTagName()+"---------------- "+y2);

    WebElement x3 = y2.findElement(By.tagName("login-dialog"));
    WebElement y3 = expandRootElement(x3);
    System.out.println(x3.getTagName()+"---------------- "+y3);
}

//Returns WebElement
public WebElement expandRootElement(WebElement element) {

    //Initializing JavaScriptExecutor
    JavascriptExecutor expandShadowElement = (JavascriptExecutor) driver;

    //Expanding Shadow Root
    WebElement expandedRootElement = (WebElement) 
    expandShadowElement.executeScript("return arguments[0].shadowRoot", element);

    return expandedRootElement;
}

Это ошибка, которую я получаю,

Unable to locate element: {"method":"css selector","selector":"login\-dialog"}

...