Reddit.com NoSuchShadowRootException - 但有一个影子根

问题描述 投票:0回答:1

首先,感谢社区中的每一个人!我是测试课程的学生,有一个项目,我正在使用 Java/Selenium/TestNG 测试 Reddit 的功能。

我在 r/SoftwareEngineering 上找到“加入”按钮元素时遇到了困难。今天早些时候,我之前使用过的所有元素 id 和 CSS 选择器似乎都停止了工作。我没有更改任何代码或更改我正在使用的浏览器驱动程序的任何内容。所以,我重新开始。

现在,我已成功登录、使用搜索栏并导航至 r/SoftwareEngineering。我想使用“加入”按钮加入小组。但是,我无法找到它。它嵌套在影子根中。昨天我在使用嵌套的 ShadowRoots 查找元素方面得到了一些帮助,

使用 Selenium、TestNT、Java 进行自动化测试 - Reddit.com - 弹出窗口中的登录按钮

现在,影子根元素似乎只是随机消失。也就是说,我最初使用以下代码找到了影子根:

WebElement joinButton = driver.findElement(By.xpath("/html/body/shreddit-app/dsa-transparency-modal-provider/report-flow-provider/div/div[1]/div[1]/section/div/div[2]/shreddit-subreddit-header-buttons"));
SearchContext shadowRoot = joinButton.getShadowRoot();
joinButton = joinButton.findElement(By.xpath("//div/faceplate-tracker/shreddit-join-button//button"));

但是,不知何故,下次运行测试时,当明显存在影子根时,我得到了 NoSuchShadowRootException。

<shreddit-join-button button-classes="px-sm py-xs" subscribe-label="Join" unsubscribe-label="Joined" unsubscribe-button-type-override="bordered" name="SoftwareEngineering" subreddit-id="t5_2qmng" buttonsize="medium">
    #shadow-root (open) ==$0
    <!---->
    <button class=" button-primary button-medium button join-btn leading-none px-sm py-xs " data-post-click-location="join">
     <!--?lit$173368049$-->
    "Join"
    </button>
</shreddit-join-button>

如有任何帮助,我们将不胜感激!

java selenium-webdriver webdriver testng reddit
1个回答
0
投票

我不确定您的问题来自哪里,但我最初是从登录帐户编写代码的。运行脚本后,发现缺少一个影子根节点。您可能不知道,Selenium 至少默认情况下会启动没有配置文件的浏览器,因此我没有登录,并且 HTML 略有不同。不管怎样,一旦我意识到我使用 Selenium 启动的浏览器更新了我的代码,并得出了下面的代码。我没有单击“加入”按钮,但我确实打印了按钮上的文本以确认它实际上是正确的按钮。

String url = "https://www.reddit.com/r/SoftwareEngineering/";

driver = new ChromeDriver();
driver.manage().window().maximize();
driver.get(url);

WebDriverWait wait = new WebDriverWait(driver, Duration.ofSeconds(10));
WebElement shadowHost1 = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("shreddit-app")));
shadowHost1.getShadowRoot();
WebElement shadowHost2 = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("dsa-transparency-modal-provider")));
shadowHost2.getShadowRoot();        
WebElement shadowHost3 = wait.until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("shreddit-subreddit-header-buttons")));
SearchContext shadowRoot4 = shadowHost3.getShadowRoot();
WebElement shadowHost5 = shadowRoot4.findElement(By.cssSelector("shreddit-join-button"));
SearchContext shadowRoot5 = shadowHost5.getShadowRoot();
WebElement joinButton = shadowRoot5.findElement(By.cssSelector("button"));
System.out.println(joinButton.getText());
© www.soinside.com 2019 - 2024. All rights reserved.