java - 无法使用 CSS 选择器在模式窗口中提取密码字段 - Selenium Java

标签 java selenium selenium-webdriver css-selectors

我可以单击起始页中的登录链接 [链接] 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/

相关文章:

java - 如何中途停止Button ActionListener并等待用户再次点击它?

java - JFrame 最大化时 ScrollBar 不会调整大小

java - Spring MongoDB : Criteria methods non-static access

python - 尝试获取并保存特定元素的屏幕截图(selenium、python、chromedriver)

firefox - 接收org.openqa.selenium.WebDriverException : Cannot find firefox binary in PATH running tests in Selenium IDE with Webdriver playback

java - 单击事件在使用 Selenium 和 Java 的 MAC OS Safari 13.05 中不起作用

java - DialogFragment OnCreateView 与 OnCreateDialog 的自定义布局

python - 我们如何在机器人框架中一次通过不同的浏览器

selenium - Allure 是否支持Bitbucket管道?

java - 如何使用 Selenium WebDriver 单击两个相同的属性?