Перейти к содержимому

Публикации egorza

9 публикаций создано egorza (учитываются публикации только с 20 апреля 2023)


#101405 Поиском элемента. Нужна помощь!

Отправлено автор: egorza 22 февраля 2012 - 11:11 в Selenium - Functional Testing

Виктор, спасибо вам.
Контейнс заменил на сравнение для правильности..
Заработал такой вариант:
//div[@class='SchoolRingsTitleBlock']//span[text()= Название 1]/following-sibling::div//a[2]
Я явно xpath недооценивал=)
Спасибо еще раз, теперь переписывать безумные циклы придется=)



#101401 Поиском элемента. Нужна помощь!

Отправлено автор: egorza 22 февраля 2012 - 09:59 в Selenium - Functional Testing

ничего не могу понять :sad:
если вам нужно кликнуть на "a", то зачем вы ищете div/span?
можно попробовать что-то типа

//span[@title='название 1']/descendant::a[@class='Sc remove indentleft']
этот локатор находит спан с названием 'название 1' и ищет там ссылку с классом 'Sc remove indentleft'

З.Ы. а чем плох локатор //span[@title='название 1']/div/a[2]? Хотя 1й и лучше


кликнуть надо на а, но сначала надо понять на какую именно.. их там очень много. Нужно кликнуть на ту а[2], которая лежит в блоке div рядом со спаном, название в котором совпадает с тем, которое я ищу. в поле Title нет значений вообще, оно в тексте, поэтому я и смотрю we.getText()



#101388 Поиском элемента. Нужна помощь!

Отправлено автор: egorza 22 февраля 2012 - 06:00 в Selenium - Functional Testing

Вроде проблема разрешилась=) неуверен, что так делать корректно, но зато работает.
Запомнить номер элемента массива, на котором название совпало с эталонным=) и потом найти по этому номеру блок с удалением.
Если есть какие-то еще идеи, пожалуйста, расскажите.



#101387 Поиском элемента. Нужна помощь!

Отправлено автор: egorza 22 февраля 2012 - 05:52 в Selenium - Functional Testing

Добрый день.
Возникла следующая проблема:
Есть некая структура:
<div class="SitleBlock">
  <span class="STitle" title=""> название1</span>
  <div class="StonsBlock">
    <a class="Sc" href="/Scgle/257">
    <a class="Sc remove indentleft" href="/Ste" id="257">
  </div>
</div>
<div class="SitleBlock">
  <span class="STitle" title=""> название2</span>
  <div class="StonsBlock">
    <a class="Sc" href="/Scgle/259">
    <a class="Sc remove indentleft" href="/Ste" id="259">
  </div>
</div>
Тут приведено 2 блока. Необходимо попасть в блок по его названию и нажать кнопку <a class="Sc remove indentleft" href="/Ste" id="ххх"> (удаление)..
Я наверное плохо умею пользоваться локаторами, но у меня идей нет=)
Сделал цикл, который сравнивет названия элементов, но как потом именно в этом блоке тыкнуть по удалению я так и не понял.
singles= driver.findElements(By.xpath("//div[@class='SitleBlock']//span"));
     for (WebElement we : singles)
	{
		if (we.getText().equalsIgnoreCase(sTestName)) 
		{	
			itemFound = true;
			break; 
		}
				
				
	}
Буду рад услышать правильные решения. Заранее благодарен



#101183 Генерирую рандомный номер для xpath элемента

Отправлено автор: egorza 16 февраля 2012 - 12:00 в Selenium - Functional Testing

А зачем юзать такой тяжеловесный метод??
Вот так нуна это делать


Спасибо большое!!!!
Сделал по примерам. Рандомный выбор из выпадающего меню:
public void chooseRandomOption(WebDriver driver, String param)
		{
			 WebElement element = driver.findElement(By.xpath(param));
			
			// Then instantiate the Select class with that WebElement
			Select select = new Select(element);
			
			// Get a list of the options
			List<WebElement> options = select.getOptions();
			int maxRandom = options.size()-1; 
			WebElement we = options.get(Random(0,maxRandom));
			we.click();
		}

Универсально и работает=) и второй метод сделал с указанием нужного элемента=) ну теперь то дело пойдет=)
Спасибо!!



#101153 Генерирую рандомный номер для xpath элемента

Отправлено автор: egorza 16 февраля 2012 - 08:09 в Selenium - Functional Testing

Добрый день.
Возникла проблема с рандомными числами. Не получается понять причину. Задача: есть несколько элементов option для одного селекта. Проверял, по xpath можно к ним обратиться //option[1], //option[2] итд. Элемент на странице получается уникальным.
Сделал 2 метода для рандомного выбора элемента:
public int Random(int start, int end)
	{
		
	 return start + (int)(Math.round((Math.random()*(end-start))));
	}
	
	public String performanceTypeId()
	{
		return "//option["+Random(1,2)+"]";
	}

И когда доходит дело до клика по этому элементу (метод для клика),

public void clickItem(WebDriver driver,String param, String errorText, int time) throws InterruptedException
	{
	
		 for (int second = 0;; second++)
			{
				if (second >= 50) Assert.fail(errorText);
				{	
					element = driver.findElement(By.xpath(param));
					try
					{	
						if (element.isDisplayed())
						{	
							
							builder = new Actions(driver);
							builder.moveToElement(driver.findElement(By.xpath(param))).build().perform();
							element.click();
							break;
						}
					}
					catch (Exception e)
					{}
				}
				Thread.sleep(time);
			}
		
	}
падает Java SE. Генератор сам отрабатывает, //option[1], //option[2] генерятся рандомно.
Подсажите пожалуйста профессионалы, так как моих новичковских знаний явно нехватает..



#101139 Вопрос по Java и TestNG

Отправлено автор: egorza 16 февраля 2012 - 06:10 в Selenium - Functional Testing

В последней строчке кода нехватает p в слове Exception, но ведь дело не в этом, да?)
throw new Excetion("Test 1 failed \n" + e.getMessage,e);}



#101134 Клик по ссылке срабатывает только в IE

Отправлено автор: egorza 16 февраля 2012 - 05:32 в Selenium - Functional Testing

Добрый день.
Столкнулся с проблемой клика по гиперссылке с картиной добавленной через CSS. Не понимаю, в чем может быть проблема, может кто-нибудь сталкивался. Итак:
Сделал доп. метод
public void clickItem(WebDriver driver,String param, String errorText) throws InterruptedException
	{
		 clickItem( driver, param,  errorText, 0);
	}
	
	public void clickItem(WebDriver driver,String param, String errorText, int time) throws InterruptedException
	{
	
		 for (int second = 0;; second++)
			{
				if (second >= 50) Assert.fail(errorText);
				{	
					element = driver.findElement(By.xpath(param));
					try
					{	
						if (element.isDisplayed())
						{	
							
							builder = new Actions(driver);
							builder.moveToElement(driver.findElement(By.xpath(param))).build().perform();
							element.click();
							break;
						}
					}
					catch (Exception e)
					{}
				}
				Thread.sleep(time);
			}
		
	}

Передаем в метод xpath элемента, текст ошибки при фейле, драйвер и задержку итераций цикла фор (очень помогает для разных браузеров при работе с событиями билдера).
Все везде работает, кроме этой ссылки: <a class="SolRisCre" href="/Sol/Ris/CreSin">Создать</a>
Вызываем: clickItem(driver,creSin, "Не тыкнулось на создание нового элемента"); Пишет: Cant find element with Xpath.. No such element.. (В IE 9 все работает).
Пробую напрямую driver.findElement(By.className("SolRisCre")).click(); и опять не работает. Cant find element with className.. Пробовал через все что можно. Не находит в Опере и Фаерфоксе. В IE работает. Не может быть в 2.19 бага какого-нибудь? или может кто-нибудь сталкивался с такой проблемой?
Заранее спасибо.



#99839 события мыши (mousemove, mouseover) в webdriver

Отправлено автор: egorza 21 января 2012 - 09:49 в Selenium - Functional Testing

Алексей Баранцев в одной из тем показывал как замедлять события=) В опере все заработало. Я так понимаю можно именно для отдельных событий использовать wait. Но IE все равно проигнорировал ожидание и убрал в угол курсор, закрыв меню. А фаерфокс даже не нажал на ок в строчке driver.findElement(By.className("button_standard")).click();. Пробовал через Xpath и через className. Везде работает, в фаерфоксе - нет.

package Testpack;

import static org.junit.Assert.*;

import java.util.concurrent.TimeUnit;

import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.firefox.FirefoxDriver;
import org.openqa.selenium.ie.InternetExplorerDriver;
import org.openqa.selenium.interactions.Actions;
import org.openqa.selenium.support.events.EventFiringWebDriver;
import org.testng.annotations.BeforeTest;

import com.opera.core.systems.OperaDriver;

public class LoginLogoutTest {
	
	public static void main(String[] args) throws InterruptedException {
		EventFiringWebDriver driver = new EventFiringWebDriver(new OperaDriver());
		driver.register(new ListenerThatWaitsBeforeAnyAction(3, TimeUnit.SECONDS));

        driver.navigate().to("http://xxx.ru");
		driver.findElement(By.id("UserName")).clear();
		driver.findElement(By.id("UserName")).sendKeys("xxx");
		driver.findElement(By.id("Password")).clear();
		driver.findElement(By.id("Password")).sendKeys("xxx");
		
		driver.findElement(By.className("button_standard")).click();
		
		 Actions builder = new Actions(driver);    
	        builder.moveToElement(driver.findElement(By.xpath("//li[contains(@class, 't-item mainmenuico_learning_head')]"))).build().perform();
	    
	    
	         driver.findElement(By.xpath("//a[@class='t-link' and contains(@href, 'Learning/StudentCourses')]")).click();
	     
	}
	
}

и сам класс ListenerThatWaitsBeforeAnyAction

package Testpack;

import java.util.concurrent.TimeUnit;

import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.support.events.AbstractWebDriverEventListener;


public class ListenerThatWaitsBeforeAnyAction extends AbstractWebDriverEventListener {
	
	private final long timeout;

	public ListenerThatWaitsBeforeAnyAction(long timeout, TimeUnit unit) {
		this.timeout = TimeUnit.MILLISECONDS.convert(Math.max(0, timeout), unit);
	}

	@Override
	public void beforeNavigateTo(String url, WebDriver driver) {
		sleep();
	}

	@Override
	public void beforeNavigateBack(WebDriver driver) {
		sleep();
	}

	@Override
	public void beforeNavigateForward(WebDriver driver) {
		sleep();
	}

	@Override
	public void beforeClickOn(WebElement element, WebDriver driver) {
		sleep();
	}

	@Override
	public void beforeChangeValueOf(WebElement element, WebDriver driver) {
		sleep();
	}

	@Override
	public void beforeScript(String script, WebDriver driver) {
		sleep();
	}

	private void sleep() {
		try {
			Thread.sleep(timeout);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}

}