Spring Boot Sping Boot Selenium - Github下拉菜单无法正常工作,如何修复?

jogvjijk  于 2022-12-04  发布在  Spring
关注(0)|答案(2)|浏览(108)

我尝试通过Sping Boot 中的Selenium实现注销测试方法,但无法检测到位于右上方的下拉菜单。
我该如何修复它?
测试方法如下所示。

@Test
@Order(4)
public void logout() throws InterruptedException {

    login();

    driver.get("https://github.com");
    Thread.sleep(1000);

    // Header-item position-relative mr-0 d-none d-md-flex
    WebElement profileDropdown = driver.findElement(By.cssSelector(".Header-item.position-relative.mr-0.d-none.d-md-flex")); // cannot work

    // dropdown-item dropdown-signout
    WebElement signOutButton = driver.findElement(By.cssSelector(".dropdown-item.dropdown-signout")); // cannot work

    profileDropdown.click();
    Thread.sleep(1000);

    signOutButton.click();
}

下面是错误部分

java.net.SocketException: Connection reset
org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":".dropdown-item.dropdown-signout"}

第1次编辑

String xpathProfile = "//*[@aria-label='View profile and more']";
WebElement profileDropdown = driver.findElement(By.xpath(xpathProfile));
    
String xpathSignOut = "//button[contains(@class,'dropdown-signout')]";
WebElement signOutButton = driver.findElement(By.xpath(xpathSignOut));

我得到了这个问题如下所示。

org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"xpath","selector":"//button[contains(@class,'dropdown-signout')]"}
ki0zmccv

ki0zmccv1#

这是一个不好的做法,试图找到这样的元素,你应该更具体。给定这个DOM,你正在使用我会尝试使用一个选择器有点像这样:

String xpathProfile = "//*[@aria-label='View profile and more']"; 
String xpathSignOut = "//button[contains(@class,'dropdown-signout')]";

正如你所看到的,这是一个xpath类型的选择器,我建议你学习xpath,因为一旦你习惯了它,它的可读性就会大大提高,而且它还能在一些你不能使用css选择器的边缘情况下工作。
我还注意到,如果你把窗口变小,你点击的配置文件按钮在github中会被隐藏起来,所以你的按钮可能不会被点击。你可以尝试使用chromeOptions设置一个更大的窗口大小:

ChromeOptions options = new ChromeOptions();
options.addArgument("--window-size=1920,1080");
ChromeDriver driver = new ChromeDriver(options);

当测试运行时,您是否能看到按钮?

vq8itlhq

vq8itlhq2#

答案如下

public void logout() throws InterruptedException {

        login();

        driver.get("https://github.com");
        Thread.sleep(1000);

        // Header-item position-relative mr-0 d-none d-md-flex
        WebElement profileDropdown = driver.findElement(By.cssSelector(".Header-item.position-relative.mr-0.d-none.d-md-flex"));
        profileDropdown.click();

        Thread.sleep(1000);

        // dropdown-item dropdown-signout
        WebElement signOutButton = driver.findElement(By.cssSelector(".dropdown-item.dropdown-signout"));
        signOutButton.click();

        Thread.sleep(2000);
        
    }

相关问题