Java Selenium:如何定位目标元素旁的switch-active元素
问题:Selenium定位目标元素旁的开关元素
我最近做Selenium自动化时碰到的问题,和一个关于「定位相邻元素」的场景高度相似。我的页面元素结构是这样的:
<div class="a-Trinity has-left-widget has-right-widget" style="cursor: pointer;"> <div class="trinity-left-widget" style=""> <div> <span class="layer-style-rule-slice" style="background-color: rgb(233, 34, 91); border-color: rgb(255, 255, 255); margin-top: 12px;"></span> <span class="layer-style-rule-slice" style="background-color: rgb(75, 170, 234); border-color: rgb(255, 255, 255); margin-top: 6px;"></span> <span class="layer-style-rule-slice" style="background-color: rgb(42, 200, 159); border-color: rgb(255, 255, 255); margin-top: 0px;"></span> <span class="layer-style-rule-slice" style="background-color: rgb(153, 207, 34); border-color: rgb(255, 255, 255); margin-top: -6px;"></span> <span class="layer-style-rule-slice" style="background-color: rgb(247, 151, 29); border-color: rgb(255, 255, 255); margin-top: -12px;"></span> </div> </div> <div class="gwt-Label trinity-middle-widget form-text">Street Lights</div> <div class="trinity-right-widget" style=""> <div class="small-switch-container layer-right-switch"> <div class="small-switch switch-active"> <div class="small-switch-button"></div> </div> </div> </div> </div>
我需要检查页面上是否显示了switch-active类的元素,目前我是这么查找目标元素的:
String className = "gwt-Label trinity-middle-widget form-text"; String htmlElement = "div"; String textToFind = layerName; // i.e. Street Light List<WebElement> elements = Common.findElementsUsingHtmlXpathClass(driver, htmlElement, className); Common.myPrint(thisClass + " elements count: " + elements.size()); for (WebElement element : elements) { // select an element String text = Common.getAllAttributes(element, driver); if (text != null) { text = text.trim(); if (text.contains(textToFind)) { // so this is my element // here is where I need to get the next one } } }
其中findElementsUsingHtmlXpathClass方法的实现是:
public static List<WebElement> findElementsUsingHtmlXpathClass(WebDriver driver, String htmlElement, String className) { List<WebElement> elements = driver .findElements(By.xpath("//" + htmlElement + "[contains(@class, '" + className + "')]")); return elements; }
麻烦的是页面里没有可用的ID来定位元素,我没法直接套用常规的相邻元素定位方案,不知道该怎么获取目标元素的下一个元素。
最后我采用了一个解决方案,只修改了方法名来匹配功能,代码如下:
public static List<WebElement> findElementsFollowingHtmlXpathClass(WebDriver driver, String htmlElement, String className) { List<WebElement> elements = driver .findElements(By.xpath("//" + htmlElement + "[contains(@class, '" + className + "')]/following-sibling::div[@class='trinity-right-widget']/descendant::div[contains(@class,'switch-active')]")); return elements; }
内容的提问来源于stack exchange,提问作者Steve Staple
相关产品推荐
相关产品推荐

