2016-08-30 3 views
0

Я работаю на веб-приложения, которые имеют структуру DIV, как показано нижеWebDriver: Java - Как получить все invsible кнопки на веб-странице и нажмите любую одну кнопку

<div class="hover-buttons"> 
    <a id="j_idt59:0:j_idt62" href="javascript:void(0);" class=" btn btn-padding-side" ng-click="click($event,{s:&quot;j_idt59:0:j_idt62&quot;,p:&quot;j_idt56&quot;});"> 
    <i class="icon left "></i> 
    Transfer 
    </a> 
    <a id="j_idt59:0:j_idt64" href="javascript:void(0);" class=" btn btn-padding-side gray-dark" ng-click="click($event,{s:&quot;j_idt59:0:j_idt64&quot;,p:&quot;j_idt56&quot;,u:&quot;breadcrumb mainPage accAddServicesPanel&quot;});"> 
    <i class="icon left "></i> 
    Account Details 
    <div scrolltopfunction=""></div> 
    </a> 
</div> 

Мне нужно, чтобы все кнопки на страницу с тегом <a id> и нажмите на любую кнопку с изменяющимися динамическими идентификаторами.

Количество кнопок, отображаемых на странице, меняется каждый раз во время входа в систему, и по умолчанию они невидимы. Просьба советом о том, как получить все кнопки и нажать любую кнопку.

+0

Я попытался это .. но ниже логика щелкает на первой кнопке настоящего 'Список mylist = driver.findElements (By.xpath ("// * [@ id = 'j_idt59']")); \t \t \t \t \t для (WebElement Ele: MyList) { \t \t \t \t \t \t \t \t \t \t \t \t Эле = driver.findElement (By.xpath ("// * [содержит (@ идентификатор, 'j_idt64 «)]")); \t \t \t \t \t \t \t \t \t \t \t JavascriptExecutor = расслоение плотной (JavascriptExecutor) драйвера; \t \t \t \t \t \t js.executeScript ("аргументы [0] .click();", Эле); ' – Aditya

+0

Вы просто проверить' isDisplayed() 'состояние и проверить на видимую кнопку как' List MyList = драйвер. findElements (By.xpath ("// * [@ ид = 'j_idt59']")); для (WebElement ele: mylist) {if (ele.isDisplayed()) {ele.click(); }} ' –

+0

Это щелкнет по первому элементу. Что, если хотите щелкнуть последний в списке? Благодарю. – Aditya

ответ

0
  1. Получить все ссылки
  2. перебирать ссылки & сравнения для текста ссылки вам требуется

Вот фрагмент кода, я думаю, что может помочь вам:

 List<WebElement> listOfButtons = driver.findElements(By.cssSelector("div.hover-buttons > a")); 

     for(WebElement button : listOfButtons){ 
      if(button.getText().trim().equals("Your Button text")){ 
       button.click(); 
      } 
     } 
1

Если вы хотите случайный клик из списка WebElement попробуйте использовать java.util.Random, как показано ниже: -

import java.util.Random; 

Random random = new Random(); 

List<WebElement> list = driver.findElements(By.id("j_idt59")); 
list.get(random.nextInt(list.size())).click(); 

Отредактировано: - Если хотите кликать определенным условием вместо случайного клика попробовать, как показано ниже: -

List<WebElement> list = driver.findElements(By.xpath("//*[contains(@id,'j_idt59')]")); 

for(WebElement el : list){ 
    if(el.getAttribute("id").contains("j_idt64")){ 
      button.click(); 
      break; 
    } 
} 
+1

Это сработало спасибо. :) еще одна вещь, которую я хочу проверить, что, если мне нужно повторить цикл и нажать следующую кнопку вместо случайного? – Aditya

+0

, с каким условием вы хотите нажать следующую кнопку? –

+0

В том же состоянии, вместо случайного, я хочу нажать кнопку 2 или 3. – Aditya

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