如何将多个元素标记与单个XPath匹配

时间:2016-05-12 14:08:26

标签: python selenium xpath selenium-webdriver

我想创建一个允许填写注册,授权和其他文本表单的函数。类似的东西:

def fill_form(my_list):
    forms = driver.find_elements_by_xpath(common_xpath)
    for element in forms:
        element.send_keys(my_list[forms.index(element)])

它应该将要发送到<input type="text"><input type="password"><textarea>元素的文本值列表作为参数。

到目前为止,我有:

common_xpath ='//input[@type="text" or @type="password"]'

但我无法理解如何将textarea元素添加到此XPath以与之匹配

3 个答案:

答案 0 :(得分:3)

更简单,更具前瞻性的策略是将XPath表达式分离为搜索所需WebElements的2/3个不同表达式,但如果您确实需要使用单个XPath表达式,我想您可以使用{{3}按照以下方式设计一些东西:

//input[@type="text" or @type="password"] | //textarea

答案 1 :(得分:1)

不确定这是否会按照您的要求进行,但是,从我看到的Xpath可以完成工作:

common_xpath = "//*[self::input[@type='text'] or self::input[@type='password'] or self::textarea]"

我没有使用Python编程,但是在Chrome的控制台(使用$x("..."))中尝试了这个程序,它似乎可以做你想要的。您应该考虑在表单(path/to/your/form//* ...)中调用该XPath,以使其更具体。

TIL你可以在Xpath中选择不同的标签:)

查看this related answer了解详情。

最后,作为个人注释,我不是使用Selenium的经验,但我建议您考虑使用PageObject模型设计模式,以使测试更容易维护。希望它适合你。

答案 2 :(得分:0)

我不知道Python,但这就是我在JAVa中所做的

String [] commanXpath= {"text", "password"};



String xpathVar= "//input[@type='"+commanXpath[index]+"']";
System.out.println(xpathVar);
By common_xpath= By.xpath(xpathVar);

看看你是否可以在Python中实现类似的逻辑。您还可以使用精确的html标签更新原始帖子。