我想创建一个允许填写注册,授权和其他文本表单的函数。类似的东西:
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
以与之匹配
答案 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标签更新原始帖子。