gpt4 book ai didi

java - 通过名称和参数在selenium中查找定位器

转载 作者:太空宇宙 更新时间:2023-11-04 09:51:08 25 4
gpt4 key购买 nike

我正在努力弄清楚如何通过名称查找元素,但不是通过乘以元素定位器,而是为其类型创建一个元素定位器并传递参数。例如,有一个页面有 10 个按钮“添加到购物车”,用于不同的商品(“笔记本电脑 A”、“笔记本电脑 b”、“笔记本电脑 c”等),因此我不想创建 3 个不同的元素,而是想要一个,例如 >>webElement elementByName(String itemName) = driver.findElement(By.xpath("//div[@button='添加到购物车' and @title = '"+ itemName+ "']")) Selenium 中存在这样的东西吗?我是 Selenium 的新手,找不到类似的东西。谢谢

最佳答案

是的,这是可能的。在分享“答案”之前,我想指出以下几点:

一些注意事项

您需要提供的 xpath 对于 Selenium 来说没有什么特别的。它是 W3C 标准。 https://www.w3.org/TR/2017/REC-xpath-datamodel-31-20170321/

如果您使用的是 Chrome,那么在尝试在 Selenium 中使用它之前,您可以先转到开发人员工具 (F12) 并按“CTRL+F”,然后在出现的搜索框中输入 xpath 来测试您的 xpath。

如果您的 xpath 与某个元素匹配,它将以黄色突出显示。如果该 xpath 有效,那么如果您将相同的 xpath 传递到 Selenium 中,它也应该有效,除非有其他原因,例如正在使用框架等。例如,Shadow DOM xpath 使用起来不是特别友好。

通过可见文本搜索

以您的笔记本电脑 A 为例;笔记本电脑B;笔记本电脑C,如果你想根据可见文本查找元素,那么你可以使用text()函数(xpath提供的)。

driver.findElement(By.xpath("//div[text()='Laptop A']");   
driver.findElement(By.xpath("//div[text()='Laptop B']");

考虑到上述内容,您可以将字符串 AB 放入数组中,并根据需要循环遍历它们:

for(int i=0; i<arr.size; i++){
driver.findElement(By.xpath("//div[text()='Laptop " + arr[i] + "']");
}

此外,您还可以使用类似于正则表达式的 contains 函数:

driver.findElement(By.xpath("//div[contains(.,'Laptop')]");

这将匹配任何具有可见文本 Laptop 的内容,即 Laptop ALaptop bThis is a Laptop 等。

编辑:基于下面的评论

public WebElement selectButtonByName(String name){
return driver.findElement(By.xpath("//div[@button='add to cart' and @title = '" + name+ "']"));
}

然后使用它:

WebElement tvElement = selectButtonByName("TV").click();

关于java - 通过名称和参数在selenium中查找定位器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54737681/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com