Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java selenium.NoSuchElementException,即使我从源代码复制了正确的id_Java_Selenium_Nosuchelementexception - Fatal编程技术网

Java selenium.NoSuchElementException,即使我从源代码复制了正确的id

Java selenium.NoSuchElementException,即使我从源代码复制了正确的id,java,selenium,nosuchelementexception,Java,Selenium,Nosuchelementexception,我正在尝试一点gmail自动化。我的代码所做的是编写一封电子邮件,然后我尝试使用从HTML源代码复制的ID选择文本区域(主题、正文、收件人)。这些ID在我进入gmail页面时有效,但在我尝试访问文本区域时停止工作 System.out.println(driver.getTitle()); wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(":3tx"))); sign = driver.findElem

我正在尝试一点gmail自动化。我的代码所做的是编写一封电子邮件,然后我尝试使用从HTML源代码复制的ID选择文本区域(主题、正文、收件人)。这些ID在我进入gmail页面时有效,但在我尝试访问文本区域时停止工作

System.out.println(driver.getTitle());
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(":3tx")));
    sign = driver.findElement(By.id(":3tx"));
    sign.sendKeys(recipient);
然后我得到这个错误:

Exception in thread "main" org.openqa.selenium.TimeoutException: Expected condition failed: waiting for visibility of element located by By.id: :3tx (tried for 5 second(s) with 500 MILLISECONDS interval)
at org.openqa.selenium.support.ui.WebDriverWait.timeoutException(WebDriverWait.java:80)
at org.openqa.selenium.support.ui.FluentWait.until(FluentWait.java:232)
at Email.sendEmail(Email.java:42)
at Email.main(Email.java:60)
Caused by: org.openqa.selenium.NoSuchElementException: Cannot locate an element using By.id: :3tx

如果元素可见,等待可见性将失败。 试试这个:

System.out.println(driver.getTitle());
    try {wait.until(ExpectedConditions.visibilityOfElementLocated(By.id(":3tx")));} catch (TimeoutException e) {}
    sign = driver.findElement(By.id(":3tx"));
    sign.sendKeys(recipient);

当你说这些ID在你到达页面之前有效时,可能会重复,这是否意味着通过这种方法获得的一些ID有效?或者这些确切的ID存在于其他地方,并且在打开compose小部件之前可以使用?其他ID已经与此方法一起使用,并且已经发挥了作用,例如那些输入用户名和密码的ID好的,这就没那么有用了。即使其他一些ID工作,这个ID也不会工作,因为每个ID都是一个无关的关注点。有些ID通过一种方法工作,有些则不工作,这是很常见的。因此,让我们抛开任何基于指向元素的其他无关ID所做的工作的概念。您是否尝试过使用driver.findElements(复数版本)。有可能ID没有其应有的唯一性,并且在您正在执行的任务中永远看不到找到的第一个实例。我刚刚尝试过,FindElements将返回一个空列表感谢您的帮助!问题是每次加载页面时都会创建id,因此当我调用By.id时,我以前输入的id不再存在。在mailinator.com中,我遇到了相同的问题,无法知道正确的id。如果至少部分id始终相同,则可以使用xpath查找所有元素。这是我用来标记mailinator收件箱中所有邮件的代码:列表框=driver.findElements(By.xpath(//I[contains(@id,'checkoff')]);对于(WebElement框:框){box.click();}