2014-02-11 2 views
0

Я работаю над Selenium WebDriver и использую Java. Если я выполняю функцию «Выход», она не находит элемент через идентификатор. Ниже приведен код:Элемент не найден и еще часть выполнена - веб-драйвер Selenium

enter image description here

Log.info("Clicking on Logout button"); 
//driver.findElement(By.id("moreLink")).click(); 
if(existsElement("logoutLink") == true) { 
    WebElement menuHoverLink = driver.findElement(By.id("logoutLink")); 
    actions.moveToElement(menuHoverLink).click().perform(); 
    Thread.sleep(6000); 
} 
else { 
    Log.info("element not present"); 
    System.out.println("element not present -- so it entered the else loop");   
} 

Ниже приведен HTML тег:

<li> 
    <a id="logoutLink" href="https://10.4.16.159/index/logout/">Log Out</a> 
</li> 
+1

Во-первых, если ваш метод существуетElement() возвращает boolean, вам не нужно сопоставлять его с _true_. Во-вторых, это ссылка на выход, отображаемая на странице, когда вы нажимаете на нее, потому что она, кажется, присутствует на каком-то наложении. Наконец, почему вы делаете наведение мыши, а не прямой щелчок? – Husam

+0

Дайте код для ** existElement ** метода. Мы можем улучшить его работу для вашего дела. – Husam

ответ

0

Попробуйте использовать .size() метод, если условие:

if(driver.findElements(By.id("logoutLink")).size() != 0){ 

или .isEmpty() вместе с !:

if(!driver.findElements(By.id("logoutLink")).isEmpty()){ 
+0

Если я использую приведенный выше код, получаю некоторую ошибку. Метод size() не определен для типа By и else, я получаю ошибку. Пожалуйста, помогите исправить это. Я новичок в selenium и java – Amirdha

+0

@ Амир видит обновленный, а не '!', '.isEmpty()' – Jai

0

Попробуйте это:

1)

actions.moveToElement(menuHoverLink).perform(); 
menuHoverLink.click; 

InstEd из:

actions.moveToElement(menuHoverLink).click().perform(); 
Thread.sleep(6000); 

ИЛИ

2) Новый метод:

clickWhenTheElementIsClickable(By.id("logoutLink"), 10); 

... 
     protected void clickWhenTheElementIsClickable(By locator, long timeout) { 
      WebDriverWait wait = (WebDriverWait)new WebDriverWait(driver,timeout) 
      .ignoring(StaleElementReferenceException.class); 
      WebElement element = wait.until(
        ExpectedConditions.elementToBeClickable(locator)); 
      element.click(); 
     } 
Смежные вопросы