无论我使用什么搜索类型,我总是得到“没有找到这样的元素”错误。为什么会这样?
public void CorrectPIN() throws InterruptedException{
driver.findElement(By.id("identifier")).sendKeys("abhisingh1313@mailinator.com");
driver.findElement(By.id("button")).click();
Thread.sleep(5000);
do {
Thread.sleep(100);
} while (driver.findElement(By.id("pin")).isDisplayed());
}
..................
无论我使用什么搜索机制,我都无法找到driver.findElement(By.id("pin")).isDisplayed())
上的元素。我甚至试过xpath。
基本上我希望webdriver等到屏幕上出现一个元素但它确实如此但即便如此我也不知道为什么它会导致错误无法找到元素错误。
答案 0 :(得分:0)
如果我理解你的问题是正确的,那么在检查while()
循环中的条件之后你的所有步骤,即
driver.findElement(By.id("pin")).isDisplayed();
您看到 NoSuchElementException
。
Java Docs明确提到NoSuchElementException
被 WebDriver.findElement(By by)
或 WebElement.findElement(By by)
引发,与您的情况相符。
有很多理由可以看到NoSuchElementException
。其中几个如下:
Locator Strategy
即id
可能无法识别确切元素。Viewport
。HTML DOM
出于上述原因的解决方案将是:
Locator Strategy
,它将唯一地标识预期的元素,最好是Css Selector
。您可以在Official locator strategies for the webdriver
使用JavascriptExecutor
使用以下代码行将Viewport
中的元素带入。您可以在Scrolling to top of the page in Python using Selenium
element = driver.find_element_by_xpath("element_xpath")
self.driver.execute_script("return arguments[0].scrollIntoView(true);", element)
使用WebDriverWait
和正确的ExpectedCondition
等待WebElement
互动。
您在以下行看到NoSuchElementException
:
while (driver.findElement(By.id("pin")).isDisplayed());
在您的代码块中,您想要检查driver.findElement(By.id("pin")).isDisplayed()
中的 while loop
是不确定的。完成 driver.findElement(By.id("button")).click();
后,系统会将您重定向到新页面,其中包含新的 HTML DOM
。因此,在新页面上,如果您希望driver.findElement(By.id("pin")).isDisplayed()
成功,则必须根据我的答案诱导WebDriverWait
WebElement
显示溶液#3。