我想自动化一个场景,我需要寻找一个元素直到它出现在结果中,然后单击它。一旦单击它,它将打开一个新窗口。
我做错了什么或我在这里想念什么?
<div class="result-container">
<div class="thumbnail" style="">
<img src="/app/static/img/br_news.png">
</div>
<div class="result-content">
<div class="header">
<img class="icon" src="/app/static/img/lexis-sm.png">
<h1 class="title" title="Philips India launches awareness campaign on the World Asthma Day">
Philips India launches awareness campaign on the World Asthma Day
</h1>
代码:
@FindBy(how=How.XPATH,using="//div[@class='result-container']")
public List<WebElement> allResultsContainer;
@FindBy(xpath="//div[@class='results']/div[@class='search-results']//div[@class='result-content']")
public static WebElement NewsResults;
@FindBy(xpath="//span[@class='label']")
public static WebElement searchAuthor;
public void searchforauthoronline() throws InterruptedException {
for(WebElement resultElement : allResultsContainer) {
log.info("Clicking on original article from search result.");
resultElement.click();
waitHelper.WaitForElement(searchAuthor, 10);
boolean visibility = searchAuthor.isDisplayed();
if(visibility){
searchAuthor.click();
}
else{
System.out.println("Element not present in search result");
}
}
答案 0 :(得分:0)
您并没有真正在问题中进行解释,但是根据您的评论,循环仅重复一次。我猜是因为在调用该方法时,只有一个元素可以迭代。
您的问题意味着您需要等待元素显示出来,在这种情况下,for
循环是该工作的错误工具。您可能应该使用一个do/while
循环,该循环一直循环直到找到可以跳出循环的元素为止。
我还建议添加故障保护条件,以使循环不会永远运行。
在伪代码中,它看起来像这样:
boolean found = false;
int counter = 0;
do {
sleep for a second
check the page for all the elements
if (correctElement.isDisplayed()) {
correctElement.click();
found = true;
}
counter++;
} while !found && counter <= 30
还有更多的功能,例如重新检查页面上的所有元素并确定正确的元素,但是您应该了解一下。