如何存储和回显所有ID';Selenium中XPath显示的输入字段数?

如何存储和回显所有ID';Selenium中XPath显示的输入字段数?,selenium,xpath,selenium-webdriver,firebug,selenium-ide,Selenium,Xpath,Selenium Webdriver,Firebug,Selenium Ide,我正在学习Selenium的自动化测试,我正在经历并尝试建立一些在网站上注册基本帐户的测试步骤 该过程将涉及获取表单中输入字段的所有ID,然后将这些ID保存到一个变量中,并回显所有ID 当前我的XPath看起来像: //*[contains(concat(' ', normalize-space(@class), ' '), ' textField')]/descendant::input 在Firebug中,它突出显示所有输入字段 现在我的问题是,我该如何保存这些输入字段的ID,并在Sele

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

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

当前我的XPath看起来像:

//*[contains(concat(' ', normalize-space(@class), ' '), ' textField')]/descendant::input
在Firebug中,它突出显示所有输入字段

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

我试着从:,得到一个更好的想法,但在临时变量中唯一回显和保存的只是我给它的变量的名称

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


非常感谢所有帮助,任何关于更有效的XPath标记/代码标记的提示都将非常有用!谢谢:)

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

假设我们要打印此页面页脚内以“Stack”开头的所有
href
链接:-
python代码:

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




打印
提问按钮的id

print(driver.find_element_by_xpath("//*[text()='Ask Question']").get_attribute('id'))
导航询问问题


Python文件的工作示例:

您可以遵循以下过程:

  • 找到页面中的所有
    输入
    标记元素并将其存储在列表中。
  • 遍历列表,使用方法获取属性
    id
    ,并将其存储在另一个Arraylist中,如您所提到的
    AllFormInputIDs
  • 现在您可以在“AllFormInputs”列表上迭代执行任何您想要的操作。
  • 下面是上述过程的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);
    }
    
    //打开firefox驱动程序实例,最大化并分配20秒的隐式超时。
    WebDriver=newfirefoxdriver();
    driver.manage().window().maximize();
    driver.manage().timeouts().implicitlyWait(20,TimeUnit.SECONDS);
    //导航到站点
    驱动程序。获取(“http://stackoverflow.com/questions/31574046/how-to-store-and-echo-all-ids-of-present-input-fields-by-xpath-in-selenium");
    //获取带有标记“input”的所有元素并放入列表
    列表输入=driver.findElements(按.tagName(“输入”));
    //创建ArrayList对象
    ArrayList AllFormInputIDs=新的ArrayList();
    //迭代列表输入中的输入id并获取“id”属性
    //其中“id”值不是空字符串
    for(WebElement输入:列出输入){
    如果(!inputID.getAttribute(“id”).equals(“”)
    添加(inputID.getAttribute(“id”);
    }
    //在存在所有输入标记的获取id的所有FormInputId上迭代
    //然后打印出来
    int i=1;
    for(字符串id:AllFormInputId){
    System.out.println(“ID”+(i++)++”:“+ID);
    }
    
    很抱歉我不熟悉这一点,但我该如何在测试中实现这一点呢?我这样问是因为IDE本身似乎对编写这样的脚本有限制,除非这是我必须加载的脚本?我看到它允许我将当前的测试导出到我选择的语言中,我只是不确定如何将这个for循环作为测试步骤,或者称之为?:)我已经用一个工作的python文件更新了答案,例如,我想您将不得不探索python解决方案非常好,但是在经过一段令人沮丧的时间最终获得python和shell解决方案设置后,我转到Eclipse和JAVA,因为selenium jar可以直接移植,我可以立即开始编码。我将重温python,但出于其他原因。谢谢你的回答!:)就像我对Chandan提到的,你们都给出了很好的答案,现在我想知道如何尝试测试,看看哪个更合适。我更喜欢JAVA/Python或两者中的任何一个,我只是对Selenium作为一个整体还不熟悉,不知道如何调用或将其作为一个测试步骤?:)再一次,你们都给出了很好的答案!正如您所说,您正在使用Selenium IDE并将测试导出到您选择的语言中,我建议您首先导航到您正在使用的站点,然后以一种语言(例如Java)导出文件。然后,在导出后,您可以从\\获取带有标记“input”的所有元素并放入列表(上面的注释)中复制代码,并将其粘贴到代码后面,以便导航到相关URL,然后执行。。是的,我将使用Eclipse IDE使用Java并导入Selenium JAR。我现在已经在从用户(浏览器、网站等)获取一些提示,并让驱动程序选择提示浏览器和网站的实例,以更友好的UI开始。再次学习JAVA和构建自动化测试让我很兴奋:)太棒了!!Godspeed@Doodely:)