t.me/atinfo_chat Telegram группа по автоматизации тестирования

jQuery in Selenium CSS locators


(d3unka) #1

Столкнулся вот с таким предупреждением при выполнении теста

WARNING: You are using a Sizzle locator as a CSS Selector. Please use the Sizzle library directly via the JavascriptExecutor or a plain CSS selector. 

Решени проблемы по ссылке

http://saucelabs.com/blog/index.php/2011/01/why-jquery-in-selenium-css-locators-is-the-way-to-go/


(Mykhailo Poliarush) #2

вот еще одно решение с Sizzle

http://prototypic.net/blog/creating-a-sizzle-css-selector-handler-for-selenium2webdriver-in-java/

{syntaxhighlighter brush: java;fontsize: 100; first-line: 1; }import java.util.List; import org.openqa.selenium.JavascriptExecutor; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebDriverException; import org.openqa.selenium.WebElement;

@SuppressWarnings(“unchecked”)
public class SizzleSelector {

private JavascriptExecutor driver;

public SizzleSelector(WebDriver webDriver) {
	driver = (JavascriptExecutor)webDriver;
}

public WebElement findElementBySizzleCss(String using) {
	injectSizzleIfNeeded();
	String javascriptExpression = createSizzleSelectorExpression(using);
	List<WebElement> elements = (List<WebElement>) driver.executeScript(javascriptExpression);
	if (elements.size() > 0)
		return elements.get(0);
	return null;
}

public List<WebElement> findElementsBySizzleCss(String using) {
	injectSizzleIfNeeded();
	String javascriptExpression = createSizzleSelectorExpression(using);

	return (List<WebElement>) driver.executeScript(javascriptExpression);
}

private String createSizzleSelectorExpression(String using) {
	return "return Sizzle(\""+using+"\")";
}

private void injectSizzleIfNeeded() {
	if (!sizzleLoaded())
		injectSizzle();
}

public Boolean sizzleLoaded() {
	Boolean loaded;
	try {
		loaded = (Boolean) driver.executeScript("return Sizzle()!=null");
	} catch(WebDriverException e) {
		loaded = false;
	}
	return loaded;
}

public void injectSizzle() {
	driver.executeScript(" var headID = document.getElementsByTagName(\"head\")[0];"+
	   "var newScript = document.createElement('script');"+
	   "newScript.type = 'text/javascript';"+
	   "newScript.src = 'https://raw.github.com/jquery/sizzle/master/sizzle.js';"+
	   "headID.appendChild(newScript);");
}

}
{/syntaxhighlighter}


(d3unka) #3

http://css-tricks.com/9657-useful-nth-child-recipies/

 

http://css-tricks.com/8854-the-difference-between-nth-child-and-nth-of-type/


(Artem) #4

Вернемся к этой теме!

У меня не работат данный пример. Кто-нибудь может у себя его проверить?

Спасибо.


(Mykhailo Poliarush) #5

что Вы пробовали и что у вас не работает?

какая ошибка возникает?


(Artem) #6

Я копипастил пример, и пробывал работаетли он.

Ошибка вот такого рода: sizzle is not defined

http://selenium.polteq.com/en/injecting-the-sizzle-css-selector-library/ - полностью весь пример.

Работает только через JS (только выбор элемента), а вот как сделать через JS ввод текста так и не понял, если знаете где почитать - скиньте ссылку

 


(Mykhailo Poliarush) #7

покажите код, как вы используете этот сизл локатор в вашем тесте


(Artem) #8

Я использовал, все как по ссылке - так же. Создал два пакета (все как в примере)- хотел посмотреть,  как работает.

И не работает.


(Mykhailo Poliarush) #9

не знаю, что вы делали, но у меня просто скопированный текст работает

распишите в деталях ваши действия