我正在使用Selenium WebDriver和Java。我正在尝试创建一个循环遍历WebElements列表的方法,以返回包含文本" Ooga Booga"的第一个WebElement,如果列表中没有包含此文本的元素,则返回null。 / p>
public class myClass {
private static WebElement element = null;
private static List<WebElement> elements = null;
public static WebElement returnOneElement (WebDriver driver){
elements = driver.findElements(By.cssSelector("someSelector"));
for (WebElement element : elements){
String myText = element.findElement(By.cssSelector("classC")).getText();
if (myText.contains("Ooga Booga")) {
return element;
}
}
return null;
}
这一切都正常,直到我遇到一个没有这个属性的元素:
String myText = element.findElement(By.cssSelector("classC")).getText();
如何在忽略任何没有&#34; someDiv&#34;的元素的同时继续遍历我的列表。在里面?
<div class="someSelector">
<div class="classA">
<div class="classB">
</div>
<div class="someSelector">
<div class="classA">
<div class="classB">
<div class="classC">
</div>
我需要在div&#34; classC&#34;。
中搜索文本答案 0 :(得分:1)
使用findElement-S方法,如下所示。
for (WebElement element : elements) {
List<WebElement> mightHaveSomeDiv = element.findElements(By.cssSelector("someDiv"));
if (mightHaveSomeDiv.size() > 0) {
//Can iterate the list if you expect more than one div of type someDiv.
String myText = mightHaveSomeDiv.get(0).getText();
if (myText.contains("Ooga Booga")) {
return element;
}
}
}
答案 1 :(得分:1)
这是您的答案。.首先声明一个父网站定位器
WebElement element1 = driver.findElement(By.id("##abc##"));
现在,如果您想在上面定义的定位器中执行任何操作或执行任何操作,则可以按以下步骤进行操作:
element1.findElement(By.xpath(" . //##yourFurtherLocABC")).click();
element1.findElement(By.xpath(" . //##yourFurtherLocXYZ")).getText();
重要 =切记在所有子元素的开头都保留一个.
!
答案 2 :(得分:0)
无论如何,让我们把它分解。此cssSelector将允许您通过标记名而不是类名来获取子div。
By.cssSelector(".someSelector div")
现在我们有一个WebElement列表,它们都是div元素,让我们只查找div中的文本。无需担心类属性
public static WebElement returnOneElement (WebDriver driver){
elements = driver.findElements(By.cssSelector(".someSelector div"));
for (WebElement element : elements){
if(element.getText().contains("Ooga Booga")) {
return element;
}
}
return null;
}
或者,您可以直接使用xpath定位器找到目标,例如
//div[@class='someSelector']//div[contains(.,'Ooga Booga')]
请注意,如果您有多个包含文本“Ooga Booga”的div,您将获得多个WebElements,而您接下来使用它可能不是您所期望的。实际上,此警告也应适用于循环。它将突破你的第一个包含“Ooga Booga”的div元素。如果想要完全匹配,则必须调整逻辑。