2012-06-12 2 views
3
<table id="ext-comp-1389" class="x-btn x-btn-text-icon " cellspacing="0" style="width: auto;"> 
<tbody class="x-btn-small x-btn-icon-small-left"> 
<tr> 
<tr> 
<td class="x-btn-ml"> 
<td class="x-btn-mc"> 
<em class="x-btn-split" unselectable="on"> 
<button id="ext-gen128" class="x-btn-text create" type="button">New</button> 
</em> 
</td> 
<td class="x-btn-mr"> 
<i>&nbsp;</i> 
</td> 
</tr> 
<tr> 
</tbody> 
</table> 

Выше, как встроен элемент HTML ..! Элемент HTML - это кнопка «Создать» со знаком «+» рядом с ним ... Если я нажимаю только на «+», я могу получить параметры меню, что-то вроде «D», «P ',' T 'и' U '. Если я нажму кнопку «Создать» (в коде, это эта часть, Новый , ничего не отображается как действие щелчка, происходит по центру ... Ниже изображено изображение кнопки. .Как щелкнуть в определенной части кнопки с помощью Selenium, для отображения списка параметров?

When I click on the New button in the middle or any place, no events are happening. When I click on the '+', the list of options are displayed, which I had given as, 'D', 'P', 'T', 'U'

Вот код, который я пытался ... за последние несколько часов,

package com.hr.testpack; 
import static org.junit.Assert.fail; 
    import java.util.concurrent.TimeUnit; 
import org.junit.After; 
import org.junit.Before; 
import org.junit.Test; 
import org.openqa.selenium.By; 
import org.openqa.selenium.Keys; 
    import org.openqa.selenium.NoSuchElementException; 
import org.openqa.selenium.WebDriver; 
import org.openqa.selenium.WebDriverBackedSelenium; 
import org.openqa.selenium.WebElement; 
import org.openqa.selenium.firefox.FirefoxDriver; 
import org.openqa.selenium.interactions.Actions; 
    import com.thoughtworks.selenium.*; 

public class Classtest2 { 

static Selenium selenium; 
static final String HOST = "localhost"; 
static final int PORT = 4444; 
static final String BROWSER = "*firefox"; 
static final String URL = "http://test.test.com"; 
private static int buttonwidth=42;//value got from firebug computation tab... 
    private static final int Xoffset = (buttonwidth/2)+6; 
private static final int Yoffset = 0; 
private WebDriver driver; 
private String baseUrl; 

private StringBuffer verificationErrors = new StringBuffer(); 
//private StringBuffer verificationErrors = new StringBuffer(); 

@Before 
public void setUp() throws Exception { 
driver = new FirefoxDriver(); 
baseUrl = "http://test.test.com/RMprojectProject"; 
    driver.manage().timeouts().implicitlyWait(90, TimeUnit.SECONDS); 
} 


@Test 

public void testrr1() throws Exception 
{ 


/* Only Driver...Driver's way to open a URL*/ 

driver.get(baseUrl + "/"); 


/* Webdriver Backed Selenium method- 

//*selenium = new WebDriverBackedSelenium(driver, baseUrl); 

//*selenium.open("/"); 

//selenium.wait(15000); - Never use Wait, when Implicit wait is used 


//WebDriver driver = ((WebDriverBackedSelenium) selenium).getWrappedDriver(); 

//Driver should be instantiated for using Driver's methods for 

// SeleniumBackedWebdriver 

    // Comments over 
    */ 


driver.findElement(By.id("username")).clear(); 
driver.findElement(By.id("username")).sendKeys("[email protected]"); 

driver.findElement(By.id("password")).clear(); 
driver.findElement(By.id("password")).sendKeys("test124"); 


/* For normal Selenium RC and SeleniumBackedWebDriver method 

selenium.type("username", "test"); 
selenium.type("password","test124"); 

*/ 

/* Internal Wait methods, which can be used for normal web 
* 
* applications. Methods written in the end of the program 
* 
* waitFor("xpath=.//*[@id='loginButton']/tbody/tr[2]/td[2]'"); 
waitSecond(20); */ 


driver.findElement(By.xpath(".//*[@id='loginButton']/tbody/tr[2]/td[2]")).click(); 

//selenium.waitForPageToLoad("85000"); 

//selenium.waitForCondition("selenium.isElementPresent(\"xpath=.//*[@id='ext-gen165']/div/table/thead/tr/td[3]\")", "70000"); 



WebElement ele = driver.findElement(By.xpath("//*[@id='ext-gen128']")); 
Actions build = new Actions(driver); 

build.moveToElement(ele, Xoffset, Yoffset).click().build().perform(); 




    // selenium.waitForCondition("selenium.isElementPresent(\"xpath=//*[@id='ext-gen246']\")", "20000"); 

driver.findElement(By.xpath("//*[@id='ext-gen245']")).click(); 

    } 



@After 

public void tearDown() throws Exception{ 

    selenium.stop(); 
    //driver.quit(); 
    String verificationErrorString = verificationErrors.toString(); 
    if (!"".equals(verificationErrorString)) { 
     fail(verificationErrorString); 
    } 
} 

private boolean isElementPresent(By by) { 
    try { 
     driver.findElement(by); 
     return true; 
    } catch (NoSuchElementException e) { 
     return false; 
    } 
} 

/* The Below methods can be used, for page loading/waits in 
* 
* normal web applications...waitFor(seconds),when called in 
* 
* the application, the wait happens...useful in occasions 

public void waitFor(String locator) throws Exception { 
    for (int second = 0;; second++) { 
     if (second >= 60) 
      fail("timeout"); 
     try { 
      if (selenium.isVisible(locator)) 
       break; 
     } catch (Exception e) { 
     } 
     Thread.sleep(1000); 
    } 
} 

public void waitSecond(int n) throws Exception { 
    for (int second = 0;; second++) { 
     if (second >= 60) 
      fail("timeout"); 
     try { 
      if (second > n - 1) 
       break; 
     } catch (Exception e) { 
     } 
     Thread.sleep(1000); 
    } 
} 

*/ 

код становится успешно выполнен и тест является передача, но элемент который должен быть замечен, когда нажата кнопка «+», не видно!

+0

Я не уверен, что вы пытаетесь сделать, но я предлагаю вам использовать действия селена, чтобы нажимать на кнопки. Для получения информации о классе Actions - selenium.googlecode.com/svn/trunk/docs/api/java/org/openqa/selenium/interactions/Actions.html –

+0

@HariReddy, я добавил изображение кнопки, и вот рассказ. Когда я нажимаю кнопку «Создать» посередине или в любом месте, событий не происходит. Когда я нажимаю «+», отображается список параметров, которые обозначают «D», «P», «T», «U» ... Теперь я знаю действия, но мне нравится см. живой код того, как он работает ... У меня появились некоторые ошибки, когда я использовал событие click внутри него ... и как передать значение смещения для события click, в позицию ... Если вы можете указать пример того, как вы можете решить этот вопрос, используя метод, это будет полезно для меня .. – Mannii88

+0

также, в частности, найти элемент на странице тоже довольно сложно ... когда я запускаю код, он говорит, что элемент не найден ... будь то из-за встраивания в класс em, я не уверен ... страница полностью загружена ... Итак, две проблемы: 1) поиск элемента 2) Щелчок по этому элементу с использованием координат ... – Mannii88

ответ

12

Используйте действия следующим образом -

WebElement ele = driver.findElement(By.xpath("//*[@id='ext-gen128']"); 
Actions build = new Actions(driver); 
build.moveToElement(ele, Xoffset, Yoffset).click().build().perform(); 

Возможно с помощью смещения вы можете точно сделать драйвер селеном, нажмите на кнопку + вы упомянули.

Надеюсь, это вам поможет.

+0

спасибо! Элемент не может быть найден ... с идентификатором ... если класс также будет включен или что-то еще, если да, можете ли вы указать, как объект находится тоже, в коде? – Mannii88

+1

Попробуйте использовать xpath как отредактировано в коде выше. Если это не сработает, дайте мне знать? –

+0

Проблема заключается в том, что я использую ОС Linux и Eclipse, а второй я пытаюсь использовать VMWare для Window 7, я не уверен, связано ли это с окружающей средой, что код работает нечетно ... Иногда Login Кнопка нажимается, иногда ее не нажимают ... Если и только если нажата кнопка «Логин», я могу перейти к следующему шагу ... !! Я застрял там ... – Mannii88

-1

Используя следующую команду _click (_xy (_cell («Создать»), - 5,5)); в сахи решил мою проблему ... !!!