C#Selenium - CSS选择器 - 定位同级

时间:2015-03-18 02:46:01

标签: c# selenium selenium-webdriver

我已经在这个问题上进行了广泛的搜索......我已经非常接近我正在寻找的东西但是我无法让它发挥作用。

我有一个带有下拉菜单的表格,我想从相邻的单元格中读取,然后根据该单元格的值选择一个选项。但是,我只想对名为“Color Mismatch”的td类执行此操作。请参阅下面的代码段:

<td class="Color-Mismatch">
                    <span style="display: none">Blue</span>
                    <select class="input-small" id="select_color" name="select_color"><option value=""></option>
<option value="2">Red</option>
<option selected="selected" value="1">Blue</option>

</select>
                </td>

<td class="Color-Mismatch">
                 Red <- I want to read this value and then choose it from the dropdown
<br>
  
  <td class="Color-Match">
                    <span style="display: none">Blue</span>
                    <select class="input-small" id="select_color" name="select_color"><option value=""></option>
<option value="2">Red</option>
<option selected="selected" value="1">Blue</option>

</select>
                </td>

<td class="Color-Match">
                 Blue <- I want to ignore this one because the colors already match

第一个"td class="Color-Mismatch"包含下拉菜单,而第二个"td class="Color-Mismatch"包含应该包含的值。当页面加载时,它将比较值,如果它们不匹配,则相应地命名它们。

我可以轻松查找并遍历所有"Color-Mismatch"类并选择下拉选项。但是,我无法弄清楚如何从其他"Color-Mismatch"类中提取值,然后从下拉列表中选择相同的值。长话短说 - &gt;我想循环遍历所有"Color-Mismatch"类,并通过选择正确的下拉值使颜色匹配。红色 - &gt;红蓝 - &gt;蓝等等。

我想继续使用CSS选择器来完成此任务。我将所有Color-Mismatch类的下拉框加载到如下列表中:IList<IWebElement> testList = driver.FindElements(By.CssSelector("td.Color-Mismatch select"));。然后我正在运行foreach循环

非常感谢任何和所有帮助!

1 个答案:

答案 0 :(得分:-1)

如果您的HTML结构与上述相同,则以下解决方案可以正常运行......

List<WebElement> objDropDowns = driver.findElements(By.cssSelector("td.Color-Mismatch:first-child select"));
List<WebElement> objMatching = driver.findElements(By.cssSelector("td.Color-Mismatch:last-child"));

    if(objDropDowns.size() > 0){

        for(int iCount=0; iCount<objDropDowns.size(); iCount++){
            String selectedText = objDropDowns.get(iCount).getText();
            String expectedText = objMatching.get(iCount).getText();
            if (!selectedText.equalsIgnoreCase(expectedText)){
                Select objSelect = new Select(objDropDowns.get(iCount));
                objSelect.selectByVisibleText(expectedText);
            }
        }
    }

我是一个Java人,我只是注意到你发布了一个C#查询!! :)