Есть отличная удаленная работа для php+codeception+jenkins+allure+docker спецов. 100% remote! Присоединиться к проекту

Нет доступа к кнопке при авторизации на сайт

firebug
webdriver
chrome
Теги: #<Tag:0x00007f7b69fbb148> #<Tag:0x00007f7b69fbae28> #<Tag:0x00007f7b69fbaa18>

(Roy Obenon) #1

Пишу авт. тест для Входа на этот сайт (просто ради практики). Когда нажимаю вход высвечивается доп. окно где выбор через, что будет вход. Смотрю в FireBuge class и записываю по какому имени искать кнопку “С помощью Google”
Экспшн типо элемент такой не найден. Кто знает подскажите в чем дело?

import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;

import java.util.concurrent.TimeUnit;

public class Selen {

private static WebDriver driver = new FirefoxDriver();

public static void main(String[] args) {
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    driver.get("http://automated-testing.info/login");
    driver.findElement(By.id("ember1160")).click();
    driver.switchTo().activeElement().findElement(By.className("btn btn-social google_oauth2")).click();

(Denis Gayevskiy) #2

Не очень я силен в синтаксисе чистого вебдрайвера, но мне кажется, что вы неправильно задаете классы. Попробуйте By.className("google_oauth2")).click();. А если хотите указать всю пачку классов, то By.cssSelector(".btn.btn-social.google_oauth2"));


(Roy Obenon) #3

не проходит, такое же экспшн


(Mykhailo Poliarush) #4

Это какой эксепшин? Просьба сразу вставлять такую информацию


(Alexey Lakovych) #5

Может быть кнопки находятся во фрейме на который нужно переключиться ?
Скиньте ссылку на страницу, или ее html полный.

upd. Увидел ссылку)), все работает, вот xpath к примеру:
//[@class=‘btn btn-social google_oauth2’] или //[@data-ember-action=‘1245’]

Если у елемента присутствует несколько “классов” (через пробел) то By.className может не отработать в таком случае


(Roy Obenon) #6

насколько я понимаю через switchTo идет переключение на появившейся фрейм и в нем я ищу элемент
По идеи последняя строка должна была отработать корректно, но увы экспшн.

 public static void main(String[] args) {
    driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS);
    driver.get("http://automated-testing.info/login");
    driver.findElement(By.id("ember1218")).click();
    
    driver.switchTo().activeElement().findElement(By.xpath("[@class='btn btn-social google_oauth2']")).click();
}


Exception in thread "main" org.openqa.selenium.InvalidSelectorException: The given selector [@class='btn btn-social google_oauth2'] is either invalid or does not result in a WebElement. The following error occurred:
InvalidSelectorError: Unable to locate an element with the xpath expression [@class='btn btn-social google_oauth2'] because of the following error:
SyntaxError: The expression is not a legal expression.

(Denis Gayevskiy) #7

Второй раз говорю, что в ByClass нельзя запихивать несколько классов сразу. Попробуйте:


(Roy Obenon) #8

ничего вышеперечисленное не работает


(cactus) #9

Зачем использовать вот это - driver.switchTo().activeElement() ?
После клика на кнопку Войти, она становится активной, и Вы пытаетесь найти в ее контексте другую кнопку которой там нет.
Используйте просто driver.findElement(By.cssSelector(".google_oauth2")).click();


(Roy Obenon) #10

Ок, благодарю за помощь