Selenium-WebDriver команди API і операції
Перехід на сторінку
Перше, що ви, мабуть, хочете зробити з WebDriver – це перейти до сторінки. Звичайний спосіб зробити це за викликом “отримати”:
driver.get("http://www.google.com");
driver.Url = "http://www.google.com";
driver.get "http://www.google.com"
Звернення до елементів інтерфейсу (Web Elements)
Звернення до елементу в WebDriver може бути зроблено через сам WebDriver або за допомогою WebElement. Кожен з прив’язок надає метод “Знайти елемент” і “знайти елементи”. Спочатку повертає об’єкт WebElement в іншому випадку він викликає виняток. Потім повертає список WebElements, також може повертати порожній список, якщо елементи не відповідають запиту.
Методи пошуку приймають об’єкт запитів “за” чимось. “За” чим можна звертатись до елементів перераховано нижче.
За ID
Це найбільш ефективний і кращий спосіб знайти елемент. Єдиний мінус – коли розробники інтерфейсу користувача роблять НЕ-унікальних ідентифікатори на сторінці або ідентифікатор, що генеруються автоматично. Клас HTML-елементу є більш доцільним, ніж автоматично згенерований ID.
Приклад того, як знайти елемент, який виглядає наступним чином:
<div id="coolestWidgetEvah">...</div>
WebElement element = driver.findElement(By.id("coolestWidgetEvah"));
IWebElement element = driver.FindElement(By.Id("coolestWidgetEvah"));
element = driver.find_element(:id, "coolestWidgetEvah")
element = driver.find_element_by_id("coolestWidgetEvah") or from selenium.webdriver.common.by import By element = driver.find_element(by=By.ID, value="coolestWidgetEvah")
За назвою класу
“Клас” в даному випадку відноситься до атрибуту елемента DOM. Часто в практичному використанні є багато елементів DOM з тим же ім’ям класу, тому, для пошуку кількох елементів стає більш практичним варіантом в порівнянні з знаходження першого елемента (за ID).
Приклад того, як знайти елемент, який виглядає наступним чином:
<div class="cheese"> <span>Cheddar</span> </div> <div class="cheese"> <span>Gouda</span> </div>
List<WebElement> cheeses = driver.findElements(By.className("cheese"));
IList<IWebElement> cheeses = driver.FindElements(By.ClassName("cheese"));
cheeses = driver.find_elements(:class_name, "cheese") or cheeses = driver.find_elements(:class, "cheese")
cheeses = driver.find_elements_by_class_name("cheese") or from selenium.webdriver.common.by import By cheeses = driver.find_elements(By.CLASS_NAME, "cheese")
За Тегом
DOM Tag Name елементу.
Приклад того, як знайти елемент, який виглядає наступним чином:
<iframe src="..."></iframe>
WebElement frame = driver.findElement(By.tagName("iframe"));
IWebElement frame = driver.FindElement(By.TagName("iframe"));
frame = driver.find_element(:tag_name, "iframe")
frame = driver.find_element_by_tag_name("iframe") or from selenium.webdriver.common.by import By frame = driver.find_element(By.TAG_NAME, "iframe")
За назвою
Знайти елемент за відповідним ім’ям атрибута.
Приклад того, як знайти елемент, який виглядає наступним чином:
<input name="cheese" type="text"/>
WebElement cheese = driver.findElement(By.name("cheese"));
IWebElement cheese = driver.FindElement(By.Name("cheese"));
cheese = driver.find_element(:name, "cheese")
cheese = driver.find_element_by_name("cheese") or from selenium.webdriver.common.by import By cheese = driver.find_element(By.NAME, "cheese")
За Посиланням
Знайти елемент посилання за текстом посилання.
Приклад того, як знайти елемент, який виглядає наступним чином:
<a href="http://www.google.com/search?q=cheese">cheese</a>>
WebElement cheese = driver.findElement(By.linkText("cheese"));
IWebElement cheese = driver.FindElement(By.LinkText("cheese"));
cheese = driver.find_element(:link_text, "cheese") or cheese = driver.find_element(:link, "cheese")
cheese = driver.find_element_by_link_text("cheese") or from selenium.webdriver.common.by import By cheese = driver.find_element(By.LINK_TEXT, "cheese")
За частиною посилання
Знайти елемент посилання з частковою відповідністю видимого тексту.
Приклад того, як знайти елемент, який виглядає наступним чином:
<a href="http://www.google.com/search?q=cheese">search for cheese</a>>
WebElement cheese = driver.findElement(By.partialLinkText("cheese"));
IWebElement cheese = driver.FindElement(By.PartialLinkText("cheese"));
cheese = driver.find_element(:partial_link_text, "cheese")
cheese = driver.find_element_by_partial_link_text("cheese") or from selenium.webdriver.common.by import By cheese = driver.find_element(By.PARTIAL_LINK_TEXT, "cheese")
За CSS
Як випливає з назви це метод знаходження CSS. Браузер за замовчуванням підтримує, тому, будь ласка, зверніться до списку W3C загальнодоступних CSS селекторів. Якщо браузер не має вбудованої підтримки для CSS запитів, тоді використовується Sizzle. IE 6,7 і FF3.0 в даний час використовують Sizzle як двигун обробки CSS запиту.
Пам’ятайте, що не всі браузери були створені рівними, деякі CSS, які можуть працювати в одній версії можуть не працювати в іншій.
Приклад, як знайти сир з коду нижче:
<div id="food"><span class="dairy">milk</span><span class="dairy aged">cheese</span></div>
WebElement cheese = driver.findElement(By.cssSelector("#food span.dairy.aged"));
IWebElement cheese = driver.FindElement(By.CssSelector("#food span.dairy.aged"));
cheese = driver.find_element(:css, "#food span.dairy.aged")
cheese = driver.find_element_by_css_selector("#food span.dairy.aged") or from selenium.webdriver.common.by import By cheese = driver.find_element(By.CSS_SELECTOR, "#food span.dairy.aged")
За XPATH
На високому рівні, WebDriver використовує вбудовані можливості браузера XPath скрізь, де це можливо. На тих браузерів, які не мають вбудовану підтримку XPath, WebDriver надає власну реалізацію. Це може привести до деякої несподіваної поведінки, якщо ви не обізнані про відмінності в різних версіях XPath.
Драйвер | Назва тегу і атрибуту | Значення атрибутів | Вбудована підтримка xpath |
Драйвер Htmlunit | У нижньому регістрі | Як вони відображаються в HTML | Так |
Драйвер Internet Explorer | У нижньому регістрі | Як вони відображаються в HTML | Ні |
Драйвер Firefox | Чутливий до регістру | Як вони відображаються в HTML | Так |
Це досить абстрактно, тому на наступний шматок коду HTML:
<input type="text" name="example" /> <INPUT type="text" name="other" />
Код знаходження елемента, що нам потрібен, буде таким:
Listinputs = driver.findElements(By.xpath("//input"));
IListinputs = driver.FindElements(By.XPath("//input"));
inputs = driver.find_elements(:xpath, "//input")
inputs = driver.find_elements_by_xpath("//input") or from selenium.webdriver.common.by import By inputs = driver.find_elements(By.XPATH, "//input")
Наступна кількість збігів буде знайдена:
Вираз XPath | Драйвер Htmlunit | Драйвер Firefox | Драйвер Internet Explorer |
//input | 1 (“example”) | 2 | 2 |
//INPUT | 0 | 2 | 0 |
Іноді HTML елементам не потрібні атрибути, які будуть оголошені явно, бо вони будуть за замовчуванням відомі. Наприклад, тег для вводу тексту не вимагає наявності атрибута “тип”, тому що він за замовчуванням “текст”. Правило використання XPath в WebDriver полягає в тому, що ви не повинні чекати, щоб бути в змозі відповідати за ці неявні атрибути.
За JavaScript
Ви можете виконати довільний JavaScript, щоб знайти елемент, і як тільки ви повернути DOM елемент, він буде автоматично перетворений в об’єкт WebElement.
Простий приклад на сторінці, яка завантажує JQuery:
WebElement element = (WebElement) ((JavascriptExecutor)driver).executeScript("return $('.cheese')[0]");
IWebElement element = (IWebElement) ((IJavaScriptExecutor)driver).ExecuteScript("return $('.cheese')[0]");
element = driver.execute_script("return $('.cheese')[0]")
element = driver.execute_script("return $('.cheese')[0]")
Знаходження всіх елементів для вводу тексту на сторінці:
Listlabels = driver.findElements(By.tagName("label")); List inputs = (List ) ((JavascriptExecutor)driver).executeScript( "var labels = arguments[0], inputs = []; for (var i=0; i < labels.length; i++){" + "inputs.push(document.getElementById(labels[i].getAttribute('for'))); } return inputs;", labels);
IListlabels = driver.FindElements(By.TagName("label")); IList inputs = (IList ) ((IJavaScriptExecutor)driver).ExecuteScript( "var labels = arguments[0], inputs = []; for (var i=0; i < labels.length; i++){" + "inputs.push(document.getElementById(labels[i].getAttribute('for'))); } return inputs;", labels);
labels = driver.find_elements(:tag_name, "label") inputs = driver.execute_script( "var labels = arguments[0], inputs = []; for (var i=0; i < labels.length; i++){" + "inputs.push(document.getElementById(labels[i].getAttribute('for'))); } return inputs;", labels)
labels = driver.find_elements_by_tag_name("label") inputs = driver.execute_script( "var labels = arguments[0], inputs = []; for (var i=0; i < labels.length; i++){" + "inputs.push(document.getElementById(labels[i].getAttribute('for'))); } return inputs;", labels)