2016-05-06 5 views
1

Используя cssSelector, я могу найти некоторые элементы с атрибутом id. Например:Сделать элемент DOM видимым без атрибута id

li[id='header-mypage-top']>a 

и используя isDisplayed() из Selenium 2 (WebDriver), обнаруживается как истинный.

Моя проблема заключается в том, чтобы щелкнуть некоторые из ссылок, как показано ниже, которые я могу найти с помощью xpath, но нашел false, используя isDisplayed().

<li class="logout" data-action-url="www.xxx.co.jp/yyy"> 
    <a href="javascript:void(0)">ログアウト</a> 
</li> 

Я пытался найти, используя следующий код:

List<WebElement> elements =  driver.findElements(By.xpath("//li[@class='logout']/a")); 
System.out.println("Logout item size: "+elements.size()); 

Размер показан как 1, но isDisplayed() возвращает ложь.

Как я могу сделать этот элемент видимым и иметь возможность щелкнуть его?

Я использую PhantomJS 2.1.1. Вышеупомянутая проблема не возникает для Firefox.

ответ

0

Это решение, которое я нашел:

wait.until(ExpectedConditions.presenceOfAllElementsLocatedBy(By.xpath("//li[@class='logout']/a"))); 
    wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//li[@class='logout']/a"))); 

Используя эти два ожидания Снегурочка решить мою проблему.

1

Я думаю, что элемент (в данном случае, «выход из системы») не загружен должным образом с конкретным временем. Таким образом, вы можете использовать явное ожидание, как показано ниже:

WebDriverWait wait = new WebDriverWait(driver, 15); 
     wait.until(ExpectedConditions.visibilityOfElementLocated(By.xpath("//li[@class='logout']/a"))); 
     boolean isLogoutDisplayed = driver.findElement(By.xpath("//li[@class='logout']/a")).isDisplayed(); 
     System.out.println("Is Logout displayed: " + isLogoutDisplayed); 
+0

У меня был WebDriverWait вот так: wait = new WebDriverWait (driver, 120); –

+0

Вы можете попробовать следующие xpath: // a [text() = 'ロ グ ア ウ ト'] –

+0

Пробовал, но такую ​​же ошибку. –

Смежные вопросы