gpt4 book ai didi

java - 使用 CSS : Selenium 按选择列表的内容查找 WebElement

转载 作者:行者123 更新时间:2023-11-28 10:59:10 24 4
gpt4 key购买 nike

简而言之:

我正在用 JAVA 为没有良好 ID(即它们是动态生成的)的 Web 应用程序编写 selenium 测试。

我的情况涉及两个组合框,如果您愿意,也可以是选择列表,其 ID 看起来像这样(注意:实际上,我可能在一个页面上有数百个这样的组合框,而不仅仅是两个。两个是为了保持简单:)):

elementOne id = '12345WORKRECORD678'

elementTwo id = '9876WORKRECORD5432'.

使用 CSSSelectors,我可以使用以下方法在列表中获取这些元素:

"...findElements(By.cssSelector("select[id*='WORKRECORD']");

其中 * 的作用类似于“CONTAINS”语句。

问题是我不知道哪个元素是哪个,因为我不能使用整个 id。我所知道的是我有一个选项列表,但我不能轻易选择我想要或需要的那个。这是因为 id 唯一一致的部分是“WORKRECORD”,其他一切都是动态的。

为了知道我的测试要使用哪个元素,我必须遍历选择列表中的每个元素(选项)并根据其中的内容做出决定。所以像这样:

    //Get all picklists that contain string "WORKRECORD" in their id. 
List<WebElement> picklists =
driver.findElements(By.cssSelector("select[id*='WORKRECORD']"));

//iterate through these picklists and get lists of options
for(WebElement picklist : picklists)
{
//get all items/options in the picklist
List<WebElement> options = picklist.findElements(By.tagName("option"));

//Next go through each value and see if it is the one I want.
//If so, then I found my web element
for(WebElement option : options)
{
if(option.equals(myValue))
{
myWantedWebElement = picklist;
return myWantedWebElement;
}
}
}

所以我的问题是:

我可以使用 CSS 根据在选项中找到的值来定位 webElement 吗?例如,伪代码将是这样的:

List<WebElement> picklists = 
driver.findElements(By.cssSelector("select[id*='WORKRECORD']:option[value contains 'myValue(s)']"));

还是我必须继续做我正在做的事情?或者有什么更好的东西会让我大吃一惊,等等......

谢谢大家,干杯!

最佳答案

另一种方法是使用 XPath 选择器 - 按 option 值定位,然后选择它的父 select:

myWantedWebElement = driver.findElement(By.xpath("//select[contains(@id,'WORKRECORD')]/option[.='optionvalue']/.."));

下面的 CSS 选择器会找到所需的 option,但不会给你 select 因为 CSS 选择器没有父选择器 - 你不能遍历返回DOM 树。

select[id*='WORKRECORD'] > option:contains('optionvalue')

关于java - 使用 CSS : Selenium 按选择列表的内容查找 WebElement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22519996/

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