【问题标题】:Unable to click a radio button which is in a different frame无法单击位于不同框架中的单选按钮
【发布时间】:2015-07-26 17:21:54
【问题描述】:

我正在尝试单击位于不同框架(而不是父框架)中的单选按钮。当我执行下面的代码时也不例外,但令人惊讶的是它甚至没有点击按钮。如果您有任何想法/在我的代码中发现任何问题,请告诉我。

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;

public class Practise_Radio_Checkbox {

    public static void main(String[] args) throws InterruptedException {

         System.setProperty("webdriver.chrome.driver", "D:\\Learning\\API\\Selenium\\chromedriver.exe");


            WebDriver browser = new ChromeDriver();

            browser.manage().timeouts().implicitlyWait(10L, TimeUnit.SECONDS);

            browser.manage().window().maximize();


            browser.get("http://www.quackit.com/html/codes/html_radio_button.cfm");

            WebElement e1 = browser.findElement(By.name("result2"));


            browser.switchTo().frame(e1);

            browser.findElement(By.xpath("html/body/form/input[1]")).click();

            browser.quit();


    }

}

【问题讨论】:

  • 嗨。我检查了下面的代码,它对我有用。请从您那里检查并告诉我。谢谢!!!

标签: java google-chrome selenium selenium-webdriver automation


【解决方案1】:

首先,它可以在 Firefox 上运行(即使没有任何显式等待):

WebDriver browser = new FirefoxDriver();

在 Chrome 上,出于某种未知原因,您必须通过 javascript 进行点击

WebElement red = driver.findElement(By.xpath(".//input[@type='radio' and @value='Red']"));
JavascriptExecutor executor = (JavascriptExecutor)browser;
executor.executeScript("arguments[0].click();", red); 

另外,我必须添加一个显式等待来等待框架出现:

WebDriverWait wait = new WebDriverWait(webDriver, 10);
WebElement iframe = wait.until(ExpectedConditions.presenceOfElementLocated(By.name("result2")));
driver.switchTo().frame(iframe);

【讨论】:

    【解决方案2】:

    我可以单击与父级不同的单选按钮。我认为问题是,您试图切换框架“按名称 - findElement(By.name("result2"))"。我用 Xpath 尝试过。它对我有用,我可以单击单选按钮“红色”。

    这是工作代码:-

    import java.util.concurrent.TimeUnit;
    import org.openqa.selenium.By;
    import org.openqa.selenium.WebDriver;
    import org.openqa.selenium.WebElement;
    import org.openqa.selenium.firefox.FirefoxDriver;
    
    public class iframeradiobutton {
        public static void main(String[] args) {
            WebDriver driver = new FirefoxDriver();
            driver.manage().timeouts().implicitlyWait(15, TimeUnit.SECONDS);
            driver.manage().window().maximize();
            driver.get("http://www.quackit.com/html/codes/html_radio_button.cfm");
    
            //Switch to Iframe
            WebElement iframe = driver.findElement(By.xpath("/html/body/div[1]/div/article/div[2]/div[2]/div[2]/iframe"));
            driver.switchTo().frame(iframe);
            driver.findElement(By.xpath("/html/body/form/input[1]")).click();
            System.out.println("Clicked on Radio Button Red");
            driver.switchTo().defaultContent();// Iframe is Switched to Main Again
    
            driver.close(); // Closes the current driver instance. 
        }
    }
    

    输出供您参考

    【讨论】:

    • 感谢您抽出宝贵时间 :) 虽然听起来很奇怪,但代码正在执行 Print 语句并在控制台中打印;但我没有看到选中的单选按钮。它仍然未经检查。为了避免混淆,我删除了 driver.close() 语句,以便浏览器窗口保持打开状态,但无济于事。它是否点击了您的系统并且选择可见?
    • 嗨 Prabodh - 请检查一下,您使用的代码与上面相同。因为它在我的最终工作正常。我附上了截图供您参考,我可以选择“红色”单选按钮。请同时更新我。
    • 我看到您的代码已经在您的系统中运行,但不是使用相同的代码,而是无法运行。除了您的代码之外,我所做的唯一不同的事情是在 IE 和 Chrome 中运行测试(这两种情况都没有运气),因为 FF 和 Webdriver 存在兼容性问题。如果您不介意,可以在 IE 和/或 Chrome 中运行您的代码吗?
    • @PrabodhGhosh 我实际上能够在 Chrome 中可靠地重现您的问题。有趣的问题!
    • 谢谢@alecxe,至少我能够分担我的痛苦......这些是我为解决这个问题所做的事情:1. 杀死了所有 ChromeDriver 会话,2. 使用了所有三种形式(id, string, web-element) 切换到框架时的框架参数 3. 尝试与页面中的其他元素交互并成功。现在我将尝试与其他站点的单选按钮进行交互;如果我成功了,那么 HTML 肯定有问题;否则,我做错了什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2017-11-12
    • 1970-01-01
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多