Java Selenium框架的一般搜索
我正在使用selenium和java进行自动化项目。项目应能够在任何应用程序/站点上工作。 所以我现在的问题是,因为每个网页都可以包含无限多个iFrame,所以我需要开发一个功能,能够搜索并迭代所有iFrame,直到找到我要查找的元素。 示例:我查找id=xx的按钮以单击:Java Selenium框架的一般搜索,java,selenium,recursion,Java,Selenium,Recursion,我正在使用selenium和java进行自动化项目。项目应能够在任何应用程序/站点上工作。 所以我现在的问题是,因为每个网页都可以包含无限多个iFrame,所以我需要开发一个功能,能够搜索并迭代所有iFrame,直到找到我要查找的元素。 示例:我查找id=xx的按钮以单击: <iframe> <iframe> <iframe> <iframe> <iframe>
<iframe>
<iframe>
<iframe>
<iframe>
<iframe>
<iframe>
<iframe>
<iframe>
<iframe>
<iframe>
<iframe> <button id="xx" />
我尝试了递归方法,但对我来说确实很难:
public static void searchFrame2(String buttonid) {
List<WebElement> frames = driver.findElements(By.tagName("iframe"));
boolean continuSearch = true;
if (!frames.isEmpty()) {
for (WebElement elem : frames) {
if (continuSearch) {
driver.switchTo().defaultContent();
driver.switchTo().frame(elem);
try {
driver.findElement(By.id(searchByValue)).click();
continuSearch = false;
} catch (Exception e) {
List<WebElement> childFrames = driver.findElements(By.tagName("iframe"));
if (childFrames.isEmpty()) {
continue;
} else {
for (WebElement element : childFrames) {
continuSearch = recursiveSearch(buttonid, element);
if (!continuSearch) {
break;
}
}
}
}
}
}
}
}
public static boolean recursiveSearch(String buttonid, WebElement currFrame) {
boolean continuSearch = true;
while (continuSearch) {
try {
driver.switchTo().frame(currFrame);
driver.findElement(By.id(buttonid)).click();
continuSearch = false;
} catch (Exception e) {// elem not found
List<WebElement> childFrames = driver.findElements(By.tagName("iframe"));
if (childFrames.isEmpty()) {
driver.switchTo().parentFrame();
return continuSearch;
} else {
for (WebElement element : childFrames) {
continuSearch = recursiveSearch(buttonid, element);
}
}
}
}
return continuSearch;
}
请有人帮帮我,我从3个星期以来一直在做这个,我想不出来。我已经用C写了一些东西。您可以将其转换为Java。存储库位于 . 基本上,嵌套的iframe类似于n元树。。下面是示例代码
if(parentIndex==0)@this.SwitchTo().DefaultContent();
var iFrameList = @this.GetFrameElements(parentIndex);
foreach (var x in iFrameList)
{
@this.SwitchTo().Frame(x.Index);
var searchedElement = @this.FindElements(locatorStrategy).ToList();
if (searchedElement.Any())
return searchedElement;
@this.SwitchTo().ParentFrame();
}
//Element not found.. Check children
foreach (var x in iFrameList)
{
if (x.HasChildren)
{
@this.SwitchTo().Frame(x.Index);
var searchedElement = @this.GetElementInIFrames(locatorStrategy, parentIndex + 1);
if (searchedElement.Any())
return searchedElement;
@this.SwitchTo().ParentFrame();
}
}
return new List<IWebElement>();
拜托,伙计,我试着把你的功能改成java,它不太管用,或者我遗漏了什么,你能帮我把它改成java吗。我得到元素未附加异常