我正在尝试检测网站的登录ID和密码字段:https://mretailstore.com/login,但似乎硒无法找到电子邮件类型框。我检查了stackoverflow,但没有得到任何解决方案。某人使用iframe的原因是他/她面临着相同的问题,但是在这里我们没有合并任何iframe。 我得到的错误是: 线程“主” org.openqa.selenium.NoSuchElementException中的异常:无法找到元素:.//*[@ id ='identity']
我正在使用的代码:
System.setProperty("webdriver.gecko.driver", "C:\\Users\\MI SERVICE\\Downloads\\geckodriver.exe");
FirefoxOptions capa = new FirefoxOptions();
capa.setCapability("marionette", true);
WebDriver driver = new FirefoxDriver(capa);
driver.get("https://www.mretailstore.com/");
driver.findElement(By.xpath(".//*[@id='identity']")).sendKeys("abc@d.com");
driver.findElement(By.xpath(".//*[@id='password']")).sendKeys("abc123");
driver.findElement(By.id("loginbutton")).click();
driver.navigate().back();
driver.close();
答案 0 :(得分:1)
看起来您的xpath仅是正确的,并且此异常发生在元素渲染之前。因此,请在页面加载后添加一些明确的等待。
无论有没有明确的等待,它都对我有用。
代码:
driver.get("https://www.mretailstore.com/");
WebDriverWait wait=new WebDriverWait(driver,20);
wait.until(ExpectedConditions.titleIs("Login"));
driver.findElement(By.xpath(".//*[@id='identity']")).sendKeys("abc@d.com");
driver.findElement(By.xpath(".//*[@id='password']")).sendKeys("abc123");
driver.findElement(By.id("loginbutton")).click();