У меня проблема, очень похожая на эту: Селен: найти элемент "рядом" с другим элементом
Мой элемент выглядит так:
<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>
Я хочу проверить, отображается ли 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;
}
Я не вижу, как применить решение, данное в цитируемой статье, так как у меня нет элемента, который я могу просто найти по идентификатору.
Как мне получить следующий элемент?
Ездил с этим раствором от круизпандеев. Я просто изменил имя метода, чтобы отразить его новую функцию:
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;
}
@cruisepandey - Я думаю, вы неправильно поняли вопрос. Этот элемент у меня уже есть!
Вы действительно хотите узнать, содержит ли следующий элемент класс switch-active?
Я думаю, что двух приведенных ниже ответов достаточно, чтобы решить эту проблему.
этот вопрос не заслуживает голосования "против" без поясняющего комментария. Я голосую.




Вы можете использовать это так:
public static List<WebElement> findElementsUsingHtmlXpathClass(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;
}
который не проверяет innerHtml, который должен содержать текст Street Lights.
фактически, он работал, когда я назвал его вместо исходного Common.findElementsUsingHtmlXpathClass. Мне потребовалось время, чтобы понять, как это сделать!
попробуйте эту строку cssSelector = "gwt-Label.trinity-middle-widget.form-text";