目前我编写了一个简短的程序,遍历页面并查找标记名为"输入"的web元素,然后使用sendkeys将数据发送到元素,然后提交它。我遇到的问题是虽然它在大多数情况下都有效,但如果我在页面上有一个iframe,并且我遍历网页寻找一个标记名为"输入"的元素,则它会关注iframe的地址栏并向其发送数据,然后尝试提交它导致错误(当我在iframe中打印地址栏的标记名时,它打印出来"输入"在控制台上)。
有没有办法避免将iframe上的地址栏作为带有tagname ="输入"?
的元素被选中我使用以下内容检查元素的标记名是否为"输入":
List<WebElement> element = driver.findElements(By.xpath("//*"));
int mainSize = element.size();
for ( int j = 0; j < mainSize; j++ ) {
if(frameElement.get(j).getTagName().toString().equals("input")){
//do something
}
}
一些注意事项:
- 当通过网页元素搜索&#34;输入&#34;的标记名时,会发生这种情况。在使用switchTo()方法切换到iframe元素之前的元素。
答案 0 :(得分:1)
为了避免地址栏,您可以再引入一项检查以确保输入元素不是地址栏。以下是实现此目的的更新代码:
List<WebElement> element = driver.findElements(By.xpath("//*"));
int mainSize = element.size();
for ( int j = 0; j < mainSize; j++ ) {
if(element.get(j).getTagName().toString().equals("input") &&
!element.get(j).getAttribute("class").equals("urlbar")){
//do something
}
}
更新1
我们可以在出现意外的浏览器搜索栏时重试。请尝试以下方法:
List<WebElement> element = driver.findElements(By.xpath("//*"));
int mainSize = element.size();
for ( int j = 0; j < mainSize; j++ ) {
if(element.get(j).getTagName().toString().equals("input") &&
!element.get(j).getAttribute("class").equals("urlbar")){
//do something
try {
element.get(j).sendKeys(somedata);
element.get(j).submit();
} catch (WebDriverException we) {
System.out.println("It seems browser search bar has been appeared. Retrying...");
//Pressing escape key to get rid of browser search bar
element.get(j).sendKeys(Keys.ESCAPE);
//Retrying
element.get(j).sendKeys(somedata);
element.get(j).submit();
}
}
}
如果您有任何疑问,请与我们联系。