我可以单击起始页中的登录链接 [链接] http://imgur.com ,结果是用户名和密码字段的模态窗口。当我尝试在结果页面上提取密码字段时,发现没有用户名和密码字段的元素。即使我当时使用 driver.getPageSource(); 检查了源代码
并且没有用户名或密码元素的迹象。以下是用于从指定 URL 中提取密码字段的代码。
pwd = driver.findElement(By.cssSelector("input[type='password']"));
点击模态窗口的代码是
driver.findElement(By.partialLinkText("sign in")).click();
后来我发现他们使用 iframe,所以我开始搜索每个 iframe 中的密码字段,如下所示。
List<WebElement> iFrames = null;
WebElement iFramePwd=null;
iFrames = driver.findElements(By.tagName("iframe"));
if (iFrames.size() > 0) {
for (int l = 0; l < iFrames.size(); l++) {
try{ driver.switchTo().frame(l);
}
catch(NoSuchFrameException ljn){
System.out.println(ljn);
driver.switchTo().defaultContent();
continue;
}
try {
try{
iFramePwd = driver.findElement(By.cssSelector("input[type='password']"));
}
catch(NoSuchElementException lkn){
System.out.println(lkn);
driver.switchTo().defaultContent();
continue;
}
iframe 的大小显示为 5,但当我尝试切换到 iFrame 时,我总是收到 NoSuchFrameException。 请访问指定的URL来分析源代码。我不知道我在哪里错过了重点。有没有办法从模式窗口获取密码字段。任何帮助将不胜感激。提前致谢
最佳答案
试试这个代码
WebDriver driver = new FirefoxDriver();
driver.get("http://imgur.com/");
driver.manage().timeouts().pageLoadTimeout(30, TimeUnit.SECONDS);
driver.manage().window().maximize();
driver.findElement(By.partialLinkText("sign in")).click();
WebDriverWait wait = new WebDriverWait(driver, 30);
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.className("cboxIframe")));
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(By.id("f")));
driver.findElement(By.name("username")).sendKeys("abcd");
driver.findElement(By.xpath(".//*[@id='password']/input")).sendKeys("abcd");
driver.close();
driver.quit();
如果我们使用循环来到达 iframe,就会出现问题。您不知道自己位于哪个 iframe 中,因为 Web 元素列表无法授予页面中 iframe 的确切顺序。例如,下面的代码不起作用并显示错误“元素属于与当前框架不同的框架 - 切换到其包含框架以使用它”
List<WebElement> my_iframes = driver.findElements(By.tagName("iframe"));
// moving to inner iframe
if(my_iframes.size() > 0){
for(WebElement my_iframe : my_iframes){
wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt(my_iframe));
}
}
driver.findElement(By.name("username")).sendKeys("abcd");
driver.findElement(By.xpath(".//*[@id='password']/input")).sendKeys("abcd");
关于java - 无法使用 CSS 选择器在模式窗口中提取密码字段 - Selenium Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39630571/