【问题标题】:Unable to locate Radio Button in iFrame无法在 iFrame 中找到单选按钮
【发布时间】:2019-04-02 00:18:51
【问题描述】:

尝试在 iFrame 中定位单选按钮,但由于找不到此类元素而出现错误。

尝试切换到 iFrame 但仍然遇到相同的错误。不知道我错过了什么。尝试了几种方法,但没有通过。不确定我的 Xpath 是否错误,或者我使用 id 定位元素的方式是否错误。 [在开发者工具中验证了我的 Xpath,但仍然遇到同样的错误 No suh Element found]

提前谢谢你。

public class Sap_Demo {

    WebDriver driver;
    JavascriptExecutor jse;

    public static void main(String[] args) 
    {

        Sap_Demo demoObj = new Sap_Demo();

        demoObj.invokeBrowser();
        demoObj.initializeSAPFiory();
        demoObj.forecastMD61();

    }



    public void invokeBrowser()
    {
        System.setProperty("webdriver.chrome.driver", "U:\\Research Paper\\Selenium\\Drivers\\Chrome\\chromedriver_win32\\chromedriver.exe");
        driver = new ChromeDriver();

        driver.manage().deleteAllCookies();
        driver.manage().window().maximize();
        driver.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS);
        driver.manage().timeouts().pageLoadTimeout(40, TimeUnit.SECONDS);
    }

    public void initializeSAPFiory()
    {

        try 
        {
            Thread.sleep(1200);
            driver.get("https://dijon.cob.csuchico.edu:8042/erp");
            driver.findElement(By.id("USERNAME_FIELD-inner")).sendKeys("H4");
            Thread.sleep(1200);

            driver.findElement(By.id("PASSWORD_FIELD-inner")).sendKeys("Onsjhjsa1087");
            Thread.sleep(1200);

            driver.findElement(By.id("CLIENT_FIELD-inner")).clear();
            Thread.sleep(1200);

            driver.findElement(By.id("CLIENT_FIELD-inner")).sendKeys("485");
            Thread.sleep(1200);

            driver.findElement(By.xpath("//span[@class='sapMBtnContent sapMLabelBold sapUiSraDisplayBeforeLogin']")).click();
        } 
        catch (InterruptedException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void forecastMD61()
    {

        try {
            driver.findElement(By.id("erpsim-tcode-btn-img")).click();
            Thread.sleep(1200);

            driver.findElement(By.id("TCode-input-inner")).sendKeys("MD61");
            Thread.sleep(1200);

            driver.findElement(By.id("TCode-launchBtn-content")).click();
            Thread.sleep(1200);

            driver.switchTo().defaultContent();
            WebElement iframe = driver.findElement(By.id("ITSFRAME1"));
            driver.switchTo().frame(iframe);

            /*driver.switchTo().frame(driver.findElement(By.xpath("//span[@id='M0:46:::4:2-imgSymb']")));
            driver.findElement(By.xpath("//span[@id='M0:46:::4:2-imgSymb']")).sendKeys("ABC");*/


            //driver.manage().timeouts().implicitlyWait(40, TimeUnit.SECONDS);
            //Thread.sleep(1600);


            /*driver.switchTo().frame("ITSFRAME1");
            WebDriverWait wait = new WebDriverWait(driver, 10);
            wait.until(ExpectedConditions.frameToBeAvailableAndSwitchToIt("ITSFRAME1"));*/

            /*WebElement E1 = wait.until(ExpectedConditions.visibilityOfElementLocated(By.id("M0:46:::4:2-imgStd")));
            WebElement E1 = driver.findElement(By.xpath("//span[@id='M0:46:::4:2-imgSymb']"));
            E1.click();*/

            //driver.findElement(By.id("M0:46:::4:2-imgStd")).click();
            //driver.findElement(By.xpath("//span[@id='M0:46:::4:2-imgStd']")).click();
            //Thread.sleep(1200);
        } 
        catch (InterruptedException e) 
        {
            e.printStackTrace();
        }

    }


}

【问题讨论】:

    标签: java selenium-webdriver iframe radio-button


    【解决方案1】:

    元素的第一个 xpath 和 iframe 的 id 是正确的,但是当窗口在新选项卡中打开时,您需要将驱动程序切换到新选项卡。
    所以,不要使用driver.switchTo().defaultContent();
    你需要使用:

    ArrayList<String> tabs = new ArrayList<String> (driver.getWindowHandles());
    driver.switchTo().window(tabs.get(1));
    

    而如果你想切换到原来的标签,你需要使用:

    driver.switchTo().window(tabs.get(0));
    

    【讨论】:

    • 导航到下一页时遇到同样的错误。我需要更改任何索引吗?这是代码: ArrayList tabs = new ArrayList (driver.getWindowHandles()); driver.switchTo().window(tabs.get(1)); driver.switchTo().frame("ITFSFRAME1"); driver.findElement(By.id("M0:46:::4:2-imgStd")).click(); driver.findElement(By.id("M0:46:::4:26")).clear(); driver.findElement(By.id("M0:46:::4:26")).sendKeys("HH-F"); driver.findElement(By.id("M0:50::btn[0]")).click(); driver.findElement(By.id("tbl294940[1,8]_c-r")).sendKeys("800");
    • @SagarBhatt 如果下一页在同一个选项卡上,那么您不需要切换驱动程序位置,如果它在新选项卡上打开,那么您切换驱动程序并在这种情况下发送索引 2而不是 1。
    • 你能看到我在访问文本区域的另一个问题吗?提问:stackoverflow.com/questions/55466437/…
    • @SagarBhatt 在您的新答案中,仅在“产品组”中输入值并单击继续按钮后,页面会抛出错误以输入所有字段?而且您提到需要在“M 05-2019”中输入值,但我在页面上看不到该字段
    • 这可能是因为,它已经在我的机器中打开了。请你再看一下。我已经关闭了我身边所有打开的实例。请您检查一下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 2021-01-08
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多