无法找到元素:org.openqa.selenium.NoSuchElementException
我正在通过一次性密码(OTP)编写用于手机号码验证的脚本。虽然OTP弹出是开放的,我不能把值在文本字段中,系统显示错误:无法找到元素:org.openqa.selenium.NoSuchElementException
org.openqa.selenium.NoSuchElementException: Unable to locate element: {"method":"class name","selector":"opt_success"} Command duration or timeout: 30.04 seconds"
下面是我起草的代码。
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();
You need to correct your Xpath for "OTP text field" as below.
driver.findElement(By.xpath("//*[@id='verifyOTP_register']//*[@id='otp']")).sendKeys("1212121212");
此外,您还可以使用 '相对' 的XPath提交的,而不是用 '绝对' 的XPath按钮。
driver.findElement(By.xpath("//*[@id='verifyOTP_register']//*[@type='submit']")).click();
真的有用,它工作正常!感谢Srikanth –
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的等价物。 或者,您可以使用元素所特有的不同定位器。
错误不是来自您的代码有问题。你能告诉我们调用'findElement(by.className(“opt_success”))''的行吗? – Buaban
Buaban是对的。您显示的代码不会导致您显示的错误。有更多的代码,显示它。谢谢。 – alecxe