Loading...
Yavor2012 avatar Yavor2012 15 Точки

Локализиране на Gmail Password field

Колеги, от няколко часа се мъча да се логна в Gmail и леко удрям на камък. Полето Email го минавам абсолютно стандартно с id и след това sendKeys(); На следващата страница , когато ми излиза Password кода гърми. NoSuchElementException, което доколкото разбрах означава, че на намира такъв елемент. Използвам Идето на Селениум и то ми показва няколко варианта за мачване на въпросното поле, сред които:

-//input[@id='Passwd'], като xpath.

-id=Passwd , като id.

-css=#Passwd, като cssSelector.

Изпробвам всичките варианти и всеки път достигам до тази грешка. Сигурен съм , че това е локацията , но не разбирам защо идва грешката. Ще ви бъда благодарен за малко помощ.

Поздрави!

Тагове:
0
Open Courses
softuniobserver avatar softuniobserver 73 Точки

Дали използваш wait преди да работиш с password? Ако не, значи кода ти се изпълнява по - бързо от колкото се рендира страницата и затова става тази грешка.

http://docs.seleniumhq.org/docs/04_webdriver_advanced.jsp

 

1
18/08/2015 15:36:14
Yavor2012 avatar Yavor2012 15 Точки

Сега погледнах. Не използвам. Принципа ми е : WebElement passField=drive.findElement(By. // и тук вече според зависи какво търся); После passField.sendKeys(  и тук паролата);

Гледам да спазвам точно инструкциите. 

 

0
softuniobserver avatar softuniobserver 73 Точки

Инструкциите на лаб - а ли спазваш? Там (abv.bg) email и password са на 1 страница и полетата са се заредили вече. В gmail двете полета са на различни страници.

(https://accounts.google.com/ServiceLogin?service=mail&continue=https://mail.google.com/mail/#identifier)

(https://accounts.google.com/ServiceLogin?service=mail&continue=https://mail.google.com/mail/#password)

 

1
Yavor2012 avatar Yavor2012 15 Точки

Не от лаб-а. Те са различни. Трябваше да сваля и chromedriver.exe , за да влезе изобщо в Chrome. И да - Първа страница минава без проблем, това е полето с юзъра и на втора страница гърмим, опитвайки се да локирам полето с паролата. Не схващам защо. 

0
softuniobserver avatar softuniobserver 73 Точки

Не съм намерила кои инструкции използваш.

Ако искаш пробвай следното:

Thread.sleep(1000);

преди да работиш с password

Ако искаш може да покажеш и кода ти.

И продължавам да си мисля, че кода ти е по - бърз от зареждането на втората страница и затова има грешка - web driver не намира елемента, защото не се е заредил така бързо, както ти се изпълнява програмата.

1
18/08/2015 18:01:44
Yavor2012 avatar Yavor2012 15 Точки

Ето го и кода, който ползвам:

 public void theAfterMethod()  {
        System.setProperty("webdriver.chrome.driver", System.getProperty("user.dir") + "\\chromedriver.exe" );
        chromeDriver = new ChromeDriver();
        chromeDriver.get("http://gmail.com");
        String userName="yavorlazarov2012@gmail.com";
        String password = "20121895";
        //Input username and press the button "Next";
        WebElement user=chromeDriver.findElement(By.id("Email"));
        user.sendKeys(userName);
        
        WebElement loginBut=chromeDriver.findElement(By.id("next"));
        loginBut.click();
       
        //Step 5: Inspect Element password , inspect element sign in button. Go in to the inbox.
        WebElement pass=chromeDriver.findElement(By.cssSelector("css=#Passwd"));
        System.out.println(pass.getText());



        String buttonId="signIn";
        WebElement entryButton=driver.findElement(By.id(buttonId));
        entryButton.click();


}



Не знам каква е причината. Може и да си права. Пробвах с твоят съвет, като сложих нишката преди зареждането на втората страница но грешката е идентична. 

0
softuniobserver avatar softuniobserver 73 Точки

Става ли да пробваш да махнеш "css=" от string - a, който подаваш на cssSelector метода

от

WebElement pass=chromeDriver.findElement(By.cssSelector("css=#Passwd"));

 

и да остане така:

 

WebElement pass=chromeDriver.findElement(By.cssSelector("#Passwd"));

 

 

1
18/08/2015 22:24:07
Yavor2012 avatar Yavor2012 15 Точки

Пробвах и така. И така и с нишката и пак същата грешка. Стейндж е цялата работа. laugh

0
softuniobserver avatar softuniobserver 73 Точки

Работи си ти с кода с имплицитен wait, който го сложих преди  да търси елемент с id=Passwd.    

     //Step 5: Inspect Element password , inspect element sign in button. Go in to the inbox.
      chromeDriver.manage().timeouts().implicitlyWait(30, TimeUnit.SECONDS); // added this code
      WebElement pass=chromeDriver.findElement(By.cssSelector("#Passwd"));
      

Ако трябва експлицитен wait, тогава:

      //Step 5: Inspect Element password , inspect element sign in button. Go in to the inbox.
      WebElement pass = (new WebDriverWait(chromeDriver, 30))
    		  .until(ExpectedConditions.presenceOfElementLocated(By.cssSelector("#Passwd")));
      

Целия метод: http://pastebin.com/hmpMxVut

Резултата: http://screencast.com/t/w7QZemfUF

Може би е добре да си смениш паролата за пощата :)

 

0
19/08/2015 03:27:26
Yavor2012 avatar Yavor2012 15 Точки

Дааа, аахахахах благодаря ти за отделеното време и предоставените варианти. А за пощата...хем щях да внимавам, хем нещо недогледах май накрая и я постнах. Ще сменя паролата и мерси отново!-Сега ще пробвам последния вариант.

 

Поздрави! 

0
IBraynov avatar IBraynov 74 Точки

Правилно е да използваш explicit wait, ако се отнася за конкретен елемент.

Ако ти е интересно и искаш да разбереш защо, може да погледнеш тук в тази тема, където сме го дискутирали.

 

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.