无法找到元素:org.openqa.selenium.NoSuchElementException

时间:2016-04-23 13:23:38

标签: java selenium nosuchelementexception

我正在用一次性密码(OTP)编写手机号码验证脚本。当OTP弹出窗口打开时,我无法在文本字段中输入值,系统显示错误:

  

org.openqa.selenium.NoSuchElementException:无法找到元素:   {“method”:“class name”,“selector”:“opt_success”}命令持续时间或   超时:30.04秒“

以下是我草拟的代码。

driver.findElement(By.id("phone")).sendKeys(Constants.MOBILE_NUMBER);
        driver.findElement(By.id("btn_verify")).click();
        driver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS);
        WebElement otp_value = driver.findElement(By.id("otp"));
        otp_value.sendKeys("1212121212");
        driver.findElement(By.xpath("html/body/div[4]/div/form/div/div[4]/span[1]/input")).click();

网页网址为:http://talentrack.in/register

2 个答案:

答案 0 :(得分:0)

WebElement otp_value = driver.findElement(By.id("otp"));

这是你的问题。在页面上有2个元素,ID为“otp”。你找到了第一个隐藏的,但你需要第二个。

您可以使用WebDriverWait查找可见元素。我在Python中这样做了:

element = WebDriverWait(driver, 0).until(EC.presence_of_element_located((By.ID, "otp")))
return element

传递给WebDriverWait的超时0意味着它只会尝试一次找到该元素。您可以创建一个执行此操作的方法,并将其传递给超时参数,以便于重复使用。

我确信这有一个Java等价物。 或者,您可以使用该元素唯一的不同定位器。

答案 1 :(得分:0)

  

您需要更正" OTP文本字段"的Xpath。如下所示。

driver.findElement(By.xpath("//*[@id='verifyOTP_register']//*[@id='otp']")).sendKeys("1212121212");

此外,您可以使用' relative'提交按钮的xpath而不是使用'绝对' xpath的。

driver.findElement(By.xpath("//*[@id='verifyOTP_register']//*[@type='submit']")).click();