java - 无法在 iFrame 中找到单选按钮
问题描述
试图在 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();
}
}
}
解决方案
您的元素的第一个 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));
推荐阅读
- javascript - 使用 CSS-Grid 合并不同单元格的边框(边框折叠行为)
- javascript - Angular JS在更改时验证输入
- python - Django 测试 (StaticLiveServerTestCase) 返回 404
- vuetify.js - 我需要一个值从左到右递减的 v 滑块。我怎样才能做到这一点?
- c# - 从 Blazor 中生成的按钮调用函数
- java - NPOI SetCellValue 在 excel 上没有绘制任何内容
- javascript - WEBGL 将颜色更改为三角形
- c++ - 使用 MPI 发送二维数组
- excel - 调试从 Access 宏调用的 Excel 宏
- alfresco - 我可以使用什么 REST API 在记录管理站点中记录文件或文件夹