我正在学习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标记/代码标记的提示都会很棒!谢谢:))
答案 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)
您可以按照以下流程操作:
input
代码元素并将其存储在列表中。 getAttribute()
方法获取属性id
并将其存储在另一个Arraylist中,如前所述AllFormInputIDs
。 以下是上述过程的 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);
}