Java selenium避免使用iframe地址栏元素

时间:2017-03-30 02:16:57

标签: java selenium iframe

目前我编写了一个简短的程序,遍历页面并查找标记名为"输入"的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元素之前的元素。

1 个答案:

答案 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();
            }
        }
     }

如果您有任何疑问,请与我们联系。