使用CSS:Selenium按选项列表的内容查找WebElement

时间:2014-03-19 23:00:51

标签: java css selenium combobox

简而言之:

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

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

elementOne id = '12345WORKRECORD678'

elementTwo id = '9876WORKRECORD5432'.

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

"...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)']"));

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

谢谢大家和干杯!

2 个答案:

答案 0 :(得分:0)

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

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

以下CSS选择器将找到所需的option,但由于CSS选择器没有父选择器,因此无法为您提供select - 您无法遍历备份DOM树。< / p>

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

答案 1 :(得分:0)

我同意Faiz。以下xpath也适用:

xpath = //select[contains(@id,'WORKRECORD') and ./option[contains(.,'optiontext')]] 

上述xpath将找到选择标记,其中其ID包含WORKRECORD,其子包含optiontext作为其可见文字