繁体   English   中英

如何使用单个XPath匹配多个元素标签

[英]How to match multiple element tags with single XPath

我想创建允许填写注册,授权和其他文本形式的功能。 就像是:

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"]'

但我不明白如何在此XPath添加textarea元素以匹配它

一种更简单且更具前瞻性的策略是将XPath表达式分成搜索所需WebElement的2/3个不同的表达式,但是如果您确实需要使用单个XPath表达式,我想您可以使用| 运营商根据以下思路设计一些东西:

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

不知道这是否能满足您的要求,但是,从我可以看到的Xpath可以完成工作:

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

我不使用Python进行编程,而是在Chrome的控制台中尝试了该操作(使用$x("...") ),它似乎可以满足您的要求。 您应该考虑在表单( path/to/your/form//* ...)内部调用该XPath,以使其更加具体。

直到您可以在Xpath中选择其他标签:)

查看此相关答案以获取更多信息。

最后,作为个人说明,我对Selenium并没有那种经验,但是我建议您考虑使用PageObject模型设计模式,以使测试更易于维护。 希望对你有效。

我不了解Python,但这就是我在JAVa中要做的事情

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



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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM