如何在Selenium中通过XPath存储和回显当前输入字段的所有ID?

时间:2015-07-22 21:10:57

标签: selenium xpath selenium-webdriver firebug selenium-ide

我正在学习Selenium进行自动化测试,我正在尝试为网站上的基本帐户注册建立一些测试步骤。

该过程将涉及获取表单中所有ID的输入字段,然后将这些ID保存到变量中并回显所有这些ID。

目前我的XPath看起来像:

//*[contains(concat(' ', normalize-space(@class), ' '), ' textField')]/descendant::input

其中,在Firebug中突出显示所有输入字段。

现在我的问题是,我将如何保存这些输入字段的ID并在Selenium中回复这些字段以进行验证/调试?

我尝试从How to store the content/value of xpath?获得一个更好的主意,但在temp变量中回显和保存的唯一内容就是我给它的变量的名称。

(我们将此变量称为“AllFormInputIDs”)

任何和所有帮助都非常受欢迎,任何有关更高效的XPath标记/代码标记的提示都会很棒!谢谢:))

2 个答案:

答案 0 :(得分:1)

找到元素后,可以使用getAttribute方法检索元素的附加属性并存储它。

让我们说我们要在页面内打印所有以{Stack'开头的href链接: - 页面 python代码:

for element in driver.find_elements_by_xpath("//*[@id='footer']//../a[contains(.,'Stack')]"):
            print(element.get_attribute('href'))

打印:

  

https://stackoverflow.com/
https://stackapps.com/
  https://meta.stackexchange.com/
http://careers.stackoverflow.com/

打印Ask Questions按钮的ID

print(driver.find_element_by_xpath("//*[text()='Ask Question']").get_attribute('id'))
  

NAV-askquestion

相同的Python文件的工作示例:GitHubFile

答案 1 :(得分:1)

您可以按照以下流程操作:

  1. 查找页面中的所有input代码元素并将其存储在列表中。
  2. 遍历列表,使用getAttribute()方法获取属性id并将其存储在另一个Arraylist中,如前所述AllFormInputIDs
  3. 现在您可以遍历" AllFormInputIDs"做你想做的任何操作。
  4. 以下是上述过程的 Java代码段

    //Opening firefox driver instance, maximizing and assigining an implicit timeout of 20 seconds.
    WebDriver driver = new FirefoxDriver();
    driver.manage().window().maximize();
    driver.manage().timeouts().implicitlyWait(20, TimeUnit.SECONDS);
    
    //Navigating to the site
    driver.get("http://stackoverflow.com/questions/31574046/how-to-store-and-echo-all-ids-of-present-input-fields-by-xpath-in-selenium");
    
    //Fetching all the elements with tag 'input' and putting in a List
    List<WebElement> List_Inputs = driver.findElements(By.tagName("input"));
    
    //Creating an ArrayList object
    ArrayList<String> AllFormInputIDs = new ArrayList<String>() ;
    
    //Iterating throught the input ids in List_Inputs and fetching the 'id' attribute
    //where 'id' value is not an empty string
    for(WebElement inputID: List_Inputs){
        if(!inputID.getAttribute("id").equals(""))
            AllFormInputIDs.add(inputID.getAttribute("id"));
    }
    
    //Iterating over AllFormInputIDs where the fetched id's of all Input tags are present
    //and printing them
    int i=1;
    for(String id: AllFormInputIDs){
        System.out.println("ID "+(i++)+": "+id);
    }