代码之家  ›  专栏  ›  技术社区  ›  G. Dan

无法单击Selenium webDriver中iframe和table内的按钮#

  •  0
  • G. Dan  · 技术社区  · 6 年前

    我是c#新手,正在c#中使用Selenium chrome webdriver。我试着点击桌子里面的按钮。我无法识别并单击按钮。按钮的层次结构是(要单击的页面>PopOver>PopOverFrame>表格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();
                    }
                }
    

    Please refer to attached screenshot of what html page looks like.

    <html xmlns="http://www.w3.org/1999/xhtml" ><title>
    
    	<div id="divReportHeader">
            <span id="contentPlaceholder_lblReportDescHeader" class="reportHeader">Description</span>
            
            <br>
    		<span id="contentPlaceholder_lblReportDescription">Offer</span>
    		
    	</div>
    	<table>
    		<tbody><tr>
    			<td style="vertical-align: top;">
    				<div style="margin: 2px; padding: 8px;">
    					<table width="1000px" style="border-spacing: 0; padding: 0" id="tblReport">
                            <tbody><tr>
                                <td></td>
                            </tr>
    						<tr>
    							<td><div id="contentPlaceholder_generalInformation" class="reportHeader">Information</div></td>
    						</tr>
    						<tr>
    							<td>
    								<span id="contentPlaceholder_lblRptInfo">
                                        This report may require more information. Click "Run Report" to view the report inline.
    								</span>
    								<br>
    							</td>
    						</tr>
    						<tr>
    						<td></td>
    						</tr>
    						<tr>
    
    						</tr>
                            <tr>
                                
                            </tr>
    						<tr>
    							<td>
    								<span id="contentPlaceholder_lblfrom">abc </span>								
                                    
    								<select name="ctl00$contentPlaceholder$ddlfromYear" onchange="javascript:setTimeout('__doPostBack(\'ctl00$contentPlaceholder$ddlfromYear\',\'\')', 0)" id="contentPlaceholder_ddlfromYear">
    
    </select>
    															
    								<span id="contentPlaceholder_lblFilter5" style="display: block; margin-top: 10px; margin-bottom: 4px;">Additional columns to be included:<br>Due to potential page size limitations, additional custom columns should only be selected when intending to view inline or export as Excel.</span>
    								<input type="submit" name="ctl00$contentPlaceholder$btnSelectAll" value="Select All" id="contentPlaceholder_btnSelectAll" class="roundedButton">
    								<input type="submit" name="ctl00$contentPlaceholder$btnDeselectAll" value="Deselect All" id="contentPlaceholder_btnDeselectAll" class="roundedButton" style="margin-bottom:5px;">
    								<table id="chkList2" class="correctCheckboxes">
    	<tbody><tr>hkList2_0" value="Select"><label for="chkList2_0">Help</label></td>
    	</tr>
    </tbody></table>
    								
    							
    							</td>
    						</tr>
    						<tr>
    							<td>
                                    <br>
    								<div id="contentPlaceholder_parameterNotes" class="reportHeader">
    									 Notes
    								</div>
                                    <br>
                                    <span id="contentPlaceholder_txtParameterNotes">None</span>
    							</td>
    						</tr>
    						<tr>
    							<td>
    								
    								
    								
    								
    								
    								
    
    							</td>
    						</tr>
    						<tr>
    							<td>
    								
    								<input type="submit" name="ctl00$contentPlaceholder$btnPrint" value="RUN REPORT" onclick="disable('contentPlaceholder_btnPrint');__doPostBack('ctl00$contentPlaceholder$btnPrint','');" id="contentPlaceholder_btnPrint" class="roundedButton" style="width:130px;">
    								
                                    
    								
    								
    								
    								
    								
    							</td>
    						</tr>
    					</tbody></table>
    			</div></td>
    		</tr>
    	</tbody></table>
    	
    	
    
    	
    	<iframe id="ifrmDownload" style="display: none;"></iframe>
    	<iframe id="ifrmStatus" src="statuscheck.aspx" style="display: none;"></iframe>
    
    		</form>
    	
    </body></html>
    2 回复  |  直到 6 年前
        1
  •  1
  •   Shahboz    6 年前

    尝试以下操作:

    //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();
    
        2
  •  1
  •   Bala    6 年前

    尝试以下方法:

    driver.switchTo().frame(driver.findElement(By.xpath(iframeXpath)));
    

    一旦操作在iFrame内完成,就切换回默认内容。

    driver.switchTo().defaultContent();