nosuchelementexception:没有这样的元素:无法找到元素错误使用selenium和java单击注册按钮

k2arahey  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(368)

所以我想测试一下这个链接的名字部分(https://softwaretestinggn8fe.herokuapp.com/)在java中使用selenium来显示错误消息“firstname只能包含字符”。当我在网站的firstname部分键入“545”时,将显示该消息。但是我的测试失败了,这是我得到的错误:

org.openqa.selenium.NoSuchElementException: no such element: Unable to locate element: {"method":"css selector","selector":"*[name='submit']"}
  (Session info: chrome=86.0.4240.198)

有人知道如何解决这个问题吗?

import org.testng.AssertJUnit;
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.chrome.ChromeDriver;
    import org.testng.Assert;
    import org.testng.annotations.Test;

    public class WebTesting {

        @Test
        public void test1() {

            System.setProperty("webdriver.chrome.driver", "C:/Users/mtecl/Desktop/Drivers/chromedriver.exe");    // configure path to the driver

            WebDriver driver = new ChromeDriver();

            driver.get("https://softwaretestinggn8fe.herokuapp.com/");

            //Username
            WebElement testUsername = driver.findElement(By.id("firstname")); //id: first name

            testUsername.sendKeys("545");

            //Button
            driver.findElement(By.name("submit")).click();

            String expected = "First Name can only contain characters.";
            String actual = driver.findElement(By.xpath("html/body/div/main/div[2]/form/div[1]/span")).getText();

            Assert.assertEquals(expected, actual);

        }
    }
fjnneemd

fjnneemd1#

click() 在元素注册中,您需要为 elementToBeClickable() 您可以使用以下任一定位器策略:
CSS选择器:

driver.get("https://softwaretestinggn8fe.herokuapp.com/");
WebElement testUsername = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.cssSelector("input#firstname")));
testUsername.sendKeys("545");
testUsername.submit();
System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.cssSelector("input#firstname +span"))).getText());

xpath:

driver.get("https://softwaretestinggn8fe.herokuapp.com/");
WebElement testUsername = new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='firstname']")));
testUsername.sendKeys("545");
testUsername.submit();
System.out.println(new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//input[@id='firstname']//following-sibling::span[1]"))).getText());

控制台输出:

First Name can only contain characters.

浏览器快照:

参考文献

关于nosuchelementexception,您可以在以下内容中找到一些相关的详细讨论:
线程“main”org.openqa.selenium.nosuchelementexception中出现异常:找不到元素://*[@id='login-email']
ie中的org.openqa.selenium.nosuchelementexception错误,但在chrome和firefox中同样的代码可以正常工作

相关问题