我正在网页上运行测试,该网页可能有也可能没有某个元素。 程序如下:我填写表格,然后点击“搜索”按钮。当浏览器打开一个新网址时,我需要选择一个element_1,但如果它不存在,我必须选择element_2。
WebElement element = driver.findElement(By.xpath("//....")) || driver.findElement(By.xpath("//..."));
element.click();
//这不是诀窍,还有其他办法吗?是不是可以尝试并抓住?
答案 0 :(得分:3)
使用driver.findElement()执行隐式等待。因此,即使出现secondElement,测试也会等待一段时间。相反,在WebDriverWait中使用findElements()可能是更好的解决方案。
WebDriverWait wait = new WebDriverWait(driver, 10);
// Wait for one element to be available
wait.until(new Predicate<WebDriver>() {
@Override public boolean apply(WebDriver driver) {
return driver.findElements(By.cssSelector("xpath1")).size() > 0
|| driver.findElements(By.cssSelector("xpath2")).size() > 0;
}
});
// Get the element
WebElement e = null;
if (driver.findElements(By.cssSelector("xpath1")).size() > 0)
e = driver.findElements(By.cssSelector("xpath1")).get(0);
else if (driver.findElements(By.cssSelector("xpath2")).size() > 0)
e = driver.findElements(By.cssSelector("xpath1")).get(0);
if (e != null)
e.click();
答案 1 :(得分:2)
你可以尝试这样的东西,是的,它正在使用try和catch块,但这是一个程序,因为除了isDisplayed(),isEnabled()和isSelected()之外没有特殊的方法isPresent()和使用try和catch块处理异常有什么问题?
boolean isElement1Present = true;
try{
driver.findElement(By.xpath("xpathExpression1"));
}catch (NoSuchElementException e){
isElement1Present = false;
}
if(isElement1Present == false)
driver.findElement(By.xpath("xpathExpression2"));
或者使用以下内容避免了try和catch块。
List<WebElement> elements = driver.findElements(By.xpath("xpathExpression1"));
if (elements.size() == 0) {
System.out.println("Element is not present");
} else {
System.out.println("Element is present");
}
答案 2 :(得分:1)
这可能对您有所帮助
WebElement element = null;
try{
element = driver.findElement(By.xpath("//path1/...."));
}catch(NoSuchElementException ex){
try{
element = driver.findElement(By.xpath("//path2/...."));
}catch(NoSuchElementException ex2){}
}
if(element!=null) element.click();
答案 3 :(得分:1)
实际上没有明确的方法。您可以使用WATIR
。如果您对Ruby
没问题,它确实提供了这样的代码。否则,你只是试着捕捉。
答案 4 :(得分:0)
我认为你可以创建一个新方法。检查此链接:WebDriver: check if an element exists?此解决方案更快。
答案 5 :(得分:0)
我认为这里更好的方法是使用可以group selectors by using a comma:
的CSS3选择器为python道歉:
element = WebDriverWait(driver, 2).until(
EC.presence_of_element_located((By.CSS_SELECTOR, "tr.entry , div.not-found"))
)
假设网页显示<div class="not-found">
以防万一没有找到。或者使用<tr class="entry">