如何使用webdriver在行上找到具有动态id的元素?

时间:2017-04-04 14:13:44

标签: c# selenium-webdriver

我有元素的HTML:

<li class="cabinet-module-holder cabinet-module-w4" ng-repeat="module in $ctrl.cabinetRow.modules track by module.id" dnd-draggable="module" dnd-effect-allowed="move" dnd-moved="$ctrl.removeModule($index, 1)" dnd-type="'0a2e00b3-8f89-4d17-a0c8-d37876043316'" dnd-dragstart="$ctrl.moduleDragStart({ cabinetModuleId: module.id })" dnd-disable-if="false" draggable="true">

我在Visual Studio中使用Webdriver框架来移动轨道/行上的元素。我想要判断这个元素是否正常。当元件较大时,柜子模块是w6,当它是小元件是w2时。 w4是每个元素的中等大小。

现在我有简短的C#代码:

string searchText = "0a2e00b3-8f89-4d17-a0c8-d37876043316";
                IList<IWebElement> rows = driver.FindElements(By.XPath("//*[@class='cabinet-body']"));
                foreach (IWebElement row in rows)
                {
                    if (row.Text.Contains(searchText))
                    {
                        SelectElement select = new SelectElement(row.FindElement(By.XPath("//*[@class='cabinet-module-holder cabinet-module-w6']")));
                        break;
                    }
                }

在日志输出窗口中,我有空位。为此,我使用函数logger.Write();

我想验证元素 - 它应该在正确的轨道上,但id是动态的,并且在新的浏览器或刷新后发生变化。

2 个答案:

答案 0 :(得分:0)

这是我在处理动态元素时多次使用过的东西。除了w2w4w6之外,听起来id或多或少相同。以下链接教会了我如何制作高级css选择器,我用它来处理动态元素。

https://www.smashingmagazine.com/2009/08/taming-advanced-css-selectors/

对于你的给定元素,你可以用很多方式写

li[class^='cabinet-module-holder cabinet-module']

答案 1 :(得分:0)

使用xpath

//*[contains(@class,'w4')]