Selenium错误:没有这样的元素:无法在.isDisplayed()方法上找到元素



我下面有一个if语句,它给我带来了一个问题。如果在其他下拉列表中进行了某些选择,则页面将显示第二个下拉列表和复选框。下面的代码在所做的选择导致这两个元素显示时按预期工作,但如果所做的选项不使它们显示,则不会。我得到no such element: Unable to locate element错误。一开始我以为它是真的,但问题是它崩溃了,因为。我甚至在尝试将值分配给booolean时添加了一个检查,但仍然会出现同样的错误。

boolean dropdown = driver.findElement(By.id("DROPDOWN")).isDisplayed();得到相同的错误。

if(driver.findElement(By.id("DROPDOWN")).isDisplayed()){
driver.findElement(By.id("DROPDOWN")).click();
driver.findElement(By.xpath("Choice in Drop DOWN)).click();
driver.findElement(By.id("CheckBox")).click();  
}

findElement方法将抛出此硬异常-如果找不到元素,则不包含此类元素。只需包含"无此类元素的异常处理",您的逻辑就会正常工作。

try{
if(driver.findElement(By.id("DROPDOWN")).isDisplayed()){
driver.findElement(By.id("DROPDOWN")).click();
driver.findElement(By.xpath("Choice in Drop DOWN)).click();
driver.findElement(By.id("CheckBox")).click();  
}
catch (NoSuchElementException e)
{
// I believe you dont have to do anything here. May be a console log will do.
}

以下答案解释了如何处理对元素存在的检查,以及如何通过包装自定义方法来处理异常。

如何检查Element是否存在于c#Selenium驱动程序中

我还建议按照以下方式重新编写代码,以避免重复并避免xpath选择器。在同一上下文中为使用findElement两次是不必要的,只需创建一个变量即可。

var dropdown = driver.findElement(By.id("DROPDOWN"));
if (dropdown.Displayed()) 
{
var selectElement = new SelectElement(dropdown);
selectElement.SelectByValue("valuehere");
}

如果您使用的是文本而不是选择框中的值,则可以使用SelectByText("texthere"(;而不是SelectByValue。

如果元素存在于DOM中,则

isDisplayed((将起作用,后面跟着style属性:-display不应为false或none。

如果先前的操作是一个导致两个元素都被显示的选择,则意味着该元素在DOM中,但不可见。因此,检查可见性条件将返回u false。

请尝试等待元素可见,然后对其执行检查操作,这样可以减少同步延迟。

WebDriverWait wait=新的WebDriverWait(WebDriverRunner.getWebDriver((,5(;wait.till(ExpectedConditions.visibilityOfElementLocated("By Locator"((;

if (dropdown.isDisplayed()) 
`````````// If the dropdown is tagged with <Select> tag
``````````` Select dropDown = new Select(dropdown);
```````````dropDown .selectByValue("value);
```````` // Else fetch the dropdown list item and store it in a list and iterate through and perform the desired action
```````````List<WebElement> dropDownList = new ArrayList<Webelements>;
```````````dropDownList.forEach(element -> {
```````````if(element.getText().equals("value")){
``````` ````element.click();
``````````` }
``````````` });
```````````driver.findElement(By.id("CheckBox")).click(); 
}    


最新更新