C# 无法单击Selenium webDriver中带c的iframe和table中的按钮#

C# 无法单击Selenium webDriver中带c的iframe和table中的按钮#,c#,selenium,selenium-webdriver,c#-4.0,selenium-chromedriver,C#,Selenium,Selenium Webdriver,C# 4.0,Selenium Chromedriver,我是c#新手,我正在c#中使用Selenium chrome webdriver。我正在尝试单击表中的按钮。我无法识别并单击按钮。按钮的层次结构是(页面>弹出框>弹出框>表1>表2>要单击的按钮) 在此方面的任何帮助都将不胜感激,谢谢 我的代码是: */ // Closing old tab, keeping control in new tab and trying to perform click operation var current

我是c#新手,我正在c#中使用Selenium chrome webdriver。我正在尝试单击表中的按钮。我无法识别并单击按钮。按钮的层次结构是(页面>弹出框>弹出框>表1>表2>要单击的按钮)

在此方面的任何帮助都将不胜感激,谢谢

我的代码是:

          */
        // Closing old tab, keeping control in new tab and trying to perform click operation
        var currentWindow = BaseTest.Driver.CurrentWindowHandle;
        var availableWindows = new List<string>(BaseTest.Driver.WindowHandles);

        foreach (string mywindows in availableWindows)
            {

            if (mywindows != currentWindow)
                {
                Driver.SwitchTo().Window(mywindows).Close();
                }
            else
                {
                Driver.SwitchTo().Window(currentWindow);

                // performing click action on RUN REPORT button

                IWebElement popOver = Driver.FindElement(By.Id("popOver"));
                IWebElement popOverFrame = popOver.FindElement(By.Id("popOverFrame"))
                IWebElement table1 = popOverFrame.FindElement(By.XPath("//*[@id='form1']/table"));
                IWebElement Table2 = table1.FindElement(By.XPath("//*[@id='tblReport']"));
                Table2.FindElement(By.Id("contentPlaceholder_btnPrint")).Click();
                }
            }
*/
//关闭旧选项卡,将控制权保留在新选项卡中并尝试执行单击操作
var currentWindow=BaseTest.Driver.CurrentWindowHandle;
var availableWindows=新列表(BaseTest.Driver.WindowHandles);
foreach(可用窗口中的字符串mywindows)
{
如果(mywindows!=currentWindow)
{
Driver.SwitchTo().Window(mywindows.Close();
}
其他的
{
Driver.SwitchTo()窗口(currentWindow);
//在运行报告按钮上执行单击操作
IWebElement popOver=Driver.FindElement(By.Id(“popOver”);
IWebElement popOverFrame=popoover.FindElement(By.Id(“popOverFrame”))
IWebElement table1=poOverFrame.FindElement(By.XPath(“//*[@id='form1']/table”);
IWebElement Table2=table1.FindElement(By.XPath(“/*[@id='tblReport']);
表2.FindElement(By.Id(“contentPlaceholder_btnPrint”)。单击();
}
}


描述

提供 问询处 本报告可能需要更多信息。单击“运行报告”以内联查看报告。
abc 要包括的其他列:
由于潜在的页面大小限制,只有在打算内联查看或作为Excel导出时,才应选择其他自定义列。 hkList2_0“value=”Select“>帮助
笔记
没有一个
试试这个:

//remove this line IWebElement popOver = Driver.FindElement(By.Id("popOver"));
Driver.SwitchTo().DefaultContent();
IWebElement popOverFrame = Driver.FindElement(By.Id("popOverFrame"))
Driver.SwitchTo().Frame(popOverFrame);
//remove this line IWebElement table1 = popOverFrame.FindElement(By.XPath("//*[@id='form1']/table"));
IWebElement Table2 = Driver.FindElement(By.XPath("//*[@id='tblReport']"));
Table2.FindElement(By.Id("contentPlaceholder_btnPrint")).Click();
试试这个:

//remove this line IWebElement popOver = Driver.FindElement(By.Id("popOver"));
Driver.SwitchTo().DefaultContent();
IWebElement popOverFrame = Driver.FindElement(By.Id("popOverFrame"))
Driver.SwitchTo().Frame(popOverFrame);
//remove this line IWebElement table1 = popOverFrame.FindElement(By.XPath("//*[@id='form1']/table"));
IWebElement Table2 = Driver.FindElement(By.XPath("//*[@id='tblReport']"));
Table2.FindElement(By.Id("contentPlaceholder_btnPrint")).Click();
请尝试以下方法:

driver.switchTo().frame(driver.findElement(By.xpath(iframeXpath)));
在iFrame中完成操作后,切换回默认内容

driver.switchTo().defaultContent();
请尝试以下方法:

driver.switchTo().frame(driver.findElement(By.xpath(iframeXpath)));
在iFrame中完成操作后,切换回默认内容

driver.switchTo().defaultContent();

如果你只是复制html代码而不是照片,那将很有帮助。嗨,哈希姆77,我添加了html代码。谢谢你的帮助如果你只是复制html代码而不是照片,那将很有帮助。嗨,哈希姆77,我添加了html代码。谢谢你的帮助答案是,大多数带有iFrame的页面需要切换到为了与交互。因此,您将首先切换到默认内容,然后再切换到层次结构中的任何第一个iframe。感谢您为我工作的Hashim。非常感谢您的帮助答案的原因是,大多数带有iframe的页面需要切换到才能与交互。因此,您将首先切换到默认内容然后不管层次结构中的第一个iframe是什么。谢谢你为我工作的Hashim。非常感谢你的帮助