我一直试图通过WebDriver获取锚点链接,但不知何故,事情没有按预期工作,我没有得到元素。
以下是HTML结构:
<div id="1">
<table width="100%">
<tr>
<td>.....</td>
<td>
<ul class="bullet">
<li>....</li>
<li>....</li>
<li>
<a href="/abc/myText.html?asq=ahsdyrg347rfbwljidwbkjab">myText</a>
</li> // myText is the text I am searching for
</ul>
</td>
</tr>
</table>
<div>....</div>
</div>
<li>
元素包含仅包含链接的锚标记。没有id
或它们包含的任何其他属性。唯一的区别是他们显示的文字,因此,我正在通过myText
来确切地检测我需要的内容。
为此,我一直在尝试的java代码是:
driver.get("url");
Thread.sleep() //waiting for elements to get loaded. Exceptional Handling not done.
WebElement divOne = driver.findElement(By.id("1"));
WebElement ul = divOne.findElement(By.className("bullet"));
WebElement anchor = null;
try{
anchor = ul.findElement(By.partialLinkText("myText"));
}catch(NoSuchElementException ex){
LOGGER.warn("Not able to locate tag:" + linkText + "\n");
}
String myLink = anchor.getAttribute("href"); // null pointer exception
我不明白为什么会这样。这样做的正确方法是什么?我应该使用其他方法吗?
答案 0 :(得分:1)
driver.findElement(By.xpath("//a[contains(text(),'myTest')]"));
搜索myTest文本。我没有尝试过代码,希望对你有帮助
答案 1 :(得分:0)
您可以使用以下任何一项。应该适合你
List<WebElement> anchor = driver.findElements(By.partialLinkText("myText"));
或
driver.findElements(By.linkText("myText"))
或
driver.findElements(By.Xpath("//a[contains(text(),'myText')]"));
答案 2 :(得分:0)
String myLink = anchor.getAttribute("href"); // null pointer exception
您正在获取异常,因为您没有设置锚值,创建了锚变量并初始化为null,之后它永远不会更新。
我认为正确的代码应该在
之下String myLink = element.getAttribute("href");
答案 3 :(得分:0)
尝试直接使用WebDriver
个实例代替WebElement
个实例...即,使用driver
代替ul
..
你可以尝试等待,
element = new WebDriverWait(driver,10).until(ExpectedConditions.visibilityOfElementLocated(By.linkText("myText")));