有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java框架地址栏元素

目前,我编写了一个短程序,它遍历一个页面,用tagname=“input”查找web元素,然后使用sendkeys向元素发送数据,然后提交。我遇到的问题是,尽管它在大多数情况下都能工作,但如果我在页面上有一个iframe,我在网页中遍历,寻找带有标记名=“input”的元素,它会关注iframe的地址栏并向其发送数据,然后尝试提交它,导致错误(当我在iframe中打印addressbar的标记名时,它在控制台上打印出“input”)

有没有办法避免iframe上的地址栏被选为标记名为“input”的元素

我使用以下命令检查元素是否有“输入”标记名:

    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
        }
    }

注意:

-This occurs when going through the webpage elements searching through tagnames for "input" elements BEFORE switching to the iframe element with the switchTo() method.


共 (1) 个答案

  1. # 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();
                }
            }
         }
    

    如果您还有任何疑问,请告诉我