Java Selenium:在获取DOM元素列表后查找子标记
首先,我是一名Javascript开发人员,负责处理Selenium,我觉得QE现在经历的痛苦lol,所以我的Java知识是基本的。我有下面的DOM结构,我需要能够找到“链接名1”并单击它。我还必须在不同的测试中对其他链接执行相同的操作Java Selenium:在获取DOM元素列表后查找子标记,java,selenium,selenium-webdriver,xpath,webdriverwait,Java,Selenium,Selenium Webdriver,Xpath,Webdriverwait,首先,我是一名Javascript开发人员,负责处理Selenium,我觉得QE现在经历的痛苦lol,所以我的Java知识是基本的。我有下面的DOM结构,我需要能够找到“链接名1”并单击它。我还必须在不同的测试中对其他链接执行相同的操作 <div class="some-container"> <div class="blah"></div> <div> <div> &
<div class="some-container">
<div class="blah"></div>
<div>
<div>
<div class="common-class-name">
<a>Link Name 1</a>
</div>
</div>
<div>
<div class="common-class-name">
<a>Link Name 2</a>
</div>
</div>
<div>
<div class="common-class-name">
<a>Link Name 3</a>
</div>
</div>
</div>
</div>
<div class="some-other-container">
<div class="blah"></div>
<div>
<div>
<div class="common-class-name">
<a>Link Name 1</a>
</div>
</div>
<div>
<div class="common-class-name">
<a>Link Name 2</a>
</div>
</div>
<div>
<div class="common-class-name">
<a>Link Name 3</a>
</div>
</div>
</div>
</div>
链接名称1
链接名称2
链接名称3
链接名称1
链接名称2
链接名称3
这里是我尝试过的一件事,findelementswiitwait基本上是一个实用函数,它使用findElements进行等待。这是行不通的
List<WebElement> list = findElementsWithWait(By.className("common-class-name"));
for (WebElement element: list) {
WebElement el = element.findElement(By.tagName("a"));
String text = el.getText();
// other code would check for the proper text and click...
}
List List=findElementsWithWait(By.className(“公共类名”);
for(WebElement:list){
WebElement el=element.findElement(按.tagName(“a”));
String text=el.getText();
//其他代码将检查正确的文本并单击。。。
}
获取标签列表的最佳方法是什么,以便能够根据文本值单击它们?尝试通过其链接文本搜索每个锚节点: 如果有多个链接具有相同的文本和唯一的祖先,请尝试按XPATH搜索
By.xpath("//div[@class='some-container']//a[.='Link Name 1']")
By.xpath("//div[@class='some-other-container']//a[.='Link Name 1']")
若要在
中的第一个链接上单击()
,该链接的文本为链接名称1,您需要将元素归纳为可折叠()
,您可以使用以下内容:
:xpath
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='some-container']//a[text()='Link Name 1']"))).click();
List<WebElement> list = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//div[starts-with(@class, 'some') and contains(@class, 'container')]//a[text()='Link Name 1']"))).click();
可见性进行归纳,您可以使用以下内容:
xpath
:
new WebDriverWait(driver, 20).until(ExpectedConditions.elementToBeClickable(By.xpath("//div[@class='some-container']//a[text()='Link Name 1']"))).click();
List<WebElement> list = new WebDriverWait(driver, 20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath("//div[starts-with(@class, 'some') and contains(@class, 'container')]//a[text()='Link Name 1']"))).click();
List List=new WebDriverWait(driver,20).until(ExpectedConditions.visibilityOfAllElementsLocatedBy(By.xpath(//div[以(@class,'some')开头并包含(@class,'container')]//a[text()='Link Name 1'])。单击();
正如我从HTML示例中看到的,链接有不同的文本。为什么要在列表中收集它们,然后单击每个文本?我更新了标记。该页面实际上可以有数百个,它们是工具提示弹出式菜单,是项目列表的一部分。我可以使用搜索框来隔离单个项目,因此您的想法会起作用,但如果我不能,其他情况也是如此,我想知道如何处理它。