当前位置: 首页 > 知识库问答 >
问题:

线程“main”组织中出现异常。openqa。硒。NoSuchElementException:无法定位元素://*[@id='login-email']

梁季
2023-03-14

我不得不重新测试xpath,以前它工作正常,但现在它给我一个错误。

我也尝试了不同的定位器,比如id、name。但仍然会得到相同的错误。

package staging;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

public class login {

    public static void main (String[]args){
        System.setProperty("webdriver.gecko.driver","C:\\Program Files\\geckodriver.exe");
        WebDriver driver = new FirefoxDriver();

        //opening the browser
        driver.get("https://staging.keela.co/login");

        //logging
        driver.findElement(By.xpath("//*[@id='login-email']")).sendKeys("bandanakeela@yopmail.com");
        driver.findElement(By.xpath("//*[@id='login-password']")).sendKeys("keela");
        driver.findElement(By.xpath("//*[@id='login-form']/div[3]/div/button")).click();       
 }
}

共有3个答案

师承弼
2023-03-14

该页面使用js构建元素。所以我建议您使用phantomjs驱动程序。

然后你必须等到元素存在。当页面加载时,您会看到齿轮图标。等到元素加载。并且您也可以使用id而不是xpath,因为您知道您的元素id。

您可以选择要使用的等待类型。显式等待或隐式等待。

这是selenium文档。

和等待的示例代码:

WebElement myDynamicElement = (new WebDriverWait(driver, 10))
  .until(ExpectedConditions.presenceOfElementLocated(By.id("login-email")));

或者您可以等到页面加载:

new WebDriverWait(firefoxDriver, pageLoadTimeout).until(
          webDriver -> ((JavascriptExecutor) webDriver).executeScript("return document.readyState").equals("complete"));
秦阳旭
2023-03-14

请尝试以下代码。

注意:如果id属性可用,那么您应该使用id,对于xpath尝试使用相对xpath

我使用了显式等待方法,因此您的驱动程序可能能够在页面完全加载后找到下一个webelement

driver.get("https://staging.keela.co/login");
driver.manage().window().maximize();

//Explicit wait for 60 seconds, to find the webelement. You can increase or decrease the time as per your specification.        
new WebDriverWait(driver, 60).until(ExpectedConditions.elementToBeClickable(driver.findElement(By.id("login-email"))));
driver.findElement(By.id("login-email")).sendKeys("bandanakeela@yopmail.com");
driver.findElement(By.id("login-password")).sendKeys("keela");
driver.findElement(By.xpath("//button[@type='submit'][text()='Log in']")).click();
董哲
2023-03-14

访问url时https://staging.keela.co/login有一个Ajax加载器会阻塞UI,因此我们必须等待Ajax加载器完成所有WebElement的加载,然后电子邮件和密码字段就会显示出来。为了实现这一点,我们将在电子邮件字段中引入显式的Web驱动程序,即将预期条件设置为可访问的元素。以下是工作代码块:

System.setProperty("webdriver.gecko.driver","C:\\Utility\\BrowserDrivers\\geckodriver.exe");
WebDriver driver = new FirefoxDriver();
driver.get("https://staging.keela.co/login");
WebDriverWait wait = new WebDriverWait (driver, 15);
WebElement element = wait.until(ExpectedConditions.elementToBeClickable(By.xpath("//input[@id='login-email']")));
element.sendKeys("bandanakeela@yopmail.com");
driver.findElement(By.xpath("//input[@id='login-password']")).sendKeys("keela");
driver.findElement(By.xpath("//button[@class='btn btn-sm btn-block btn-primary']")).click(); 
 类似资料:
  • 我尝试使用selenium测试登录功能,但我得到了这个例外: 这是我的代码: 注意:我尝试使用和xpath,但仍然不起作用。我也尝试在本文中使用一些解决方案,但没有结果 这是Html页面使用框架的菜单和其他表单登录页面 SCT公司 :

  • 问题内容: 我不得不重新测试,以前工作正常,但现在却出现了错误。 我也尝试过使用其他定位器,例如。但仍然出现相同的错误。 问题答案: 当您访问url时,有一个阻止UI的Ajax加载器,因此我们必须等待Ajax加载器完成所有WebElement的加载,并且and 字段变为可见。为了实现这一目标,我们将推出即与设置为对field.Here是工作代码块:

  • 我试图登录页面使用下面的脚本,但同时最大化窗口它显示我下面的错误。 线程“main”组织中出现异常。openqa。硒。WebDriverException:未知错误:无法从未知错误获取自动化扩展:找不到页面:chrome-extension://aapnijgdinlhnhlmodcfapnahmbfebeb/_generated_background_page.html(会话信息:chrome=

  • 我读过一些在线文章,它们都指向一个方向,即当页面加载元素时,找不到元素。在my setData()中,您可以看到我尝试了一些方法,例如使用wait、implicitwait和第一次单击然后发送用户名。然而,一切似乎都不起作用。我还想过在pageProperties中使用“wait”,但后来改变了主意,因为这可能是一个糟糕的设计。 错误: 系统信息:Windows 10,ChromeDriver 2

  • 我已经在我的pom.xml中添加了最新的硒依赖项 我用pom在目录中运行了mvn clean install。xml和我还根据Selenium文档在我的应用程序类中导入了正确的类 然而,当我尝试运行我的主方法时,我得到以下错误 我在我的~/. m2/repository文件夹中查看,我没有看到openqa文件夹,而是看到了seleniumhq文件夹。 为什么maven没有安装openqa文件夹,为

  • 我在运行下面的代码时遇到“无法定位元素”异常。我的预期输出是的第一页。 如果我运行上面的代码,我会得到“无法定位元素异常”。我知道前面的Button元素不在Google搜索结果页面的第一页中,但是我想要抑制异常并获得下一步条件的输出。