Щракнете върху връзка, работеща в Selenium Ide, но не работеща в Webdriver

Тествам сценарий за сайта "https://www.freecrm.com/index.html"

идентификационни данни за вход [ john2013 / john2013 ]

Scenario :

1 open the site https://www.freecrm.com/index.html

2 login  with valid credentials

3 click on the "New Contacts" link

4 Add new contacts

използвайки Selenium ide, мога да вляза и да щракна върху връзката „Нов контакт“, но когато се опитвам да направя същото с помощта на Webdriver [java], не мога да щракна върху връзката „Нов контакт“

кодът, който съм написал, е даден по-долу

driver.findElement(By.name("username")).clear()     
driver.findElement(By.name("username")).sendKeys("john2013");
driver.findElement(By.name("password")).clear();
driver.findElement(By.name("password")).sendKeys("john2013");
driver.findElement(By.cssSelector("input[type=\"image\"]")).click();

Кодът до горния работи добре, но щракнете върху връзката „Нов контакт“.

driver.findElement(By.xpath("//div[@class='noprint']/span[@class='headertext']/a[3]/")).click();

не работи, въпреки че същият xpath работи в IDE.

Опитах с опцията за очаквано състояние, спя, но нищо не работи.

може ли някой да ми помогне в това отношение.


person John    schedule 22.09.2013    source източник


Отговори (3)


Проблемът е, че вашата страница използва набор от рамки. Трябва да кажете на вашия уебдрайвър коя рамка да използва, когато ще търси вашия елемент. Така че опитайте това:

driver.findElement(By.name("username")).clear()     
driver.findElement(By.name("username")).sendKeys("john2013");
driver.findElement(By.name("password")).clear();
driver.findElement(By.name("password")).sendKeys("john2013");
driver.findElement(By.cssSelector("input[type=\"image\"]")).click();

//switch the driver to use one of the frames on your page. Potentially wait for a bit till the page is loaded
driver.switchTo().frame("mainpanel");

driver.findElement(By.xpath("//*[text()='New Contact']")).click();
person joostschouten    schedule 22.09.2013
comment
1. driver.switchTo().frame("mainpanel");, не window предполагам. 2. XPath на OP е грешен, но //*[text()='New Contact'] вероятно не е най-добрият (използването на XPath е по-бавно, използването на текст зависи от езика). Намерете го по href с XPath/CssSelector би било по-добре. By.cssSelector(".navlink[href*='action=contact&sub=load']") - person Yi Zeng; 23.09.2013
comment
Ти си прав. Промених прозореца на рамката в моя отговор. Също така по отношение на xpath сте напълно прави, че използването на текст не е най-добрият начин. Просто исках да покажа, че използването на по-къс xpath от използвания в момента е опция. Благодаря. - person joostschouten; 23.09.2013
comment
By.cssSelector(.navlink[href*='action=contact&sub=load']) това работи за мен, за да щракна върху връзката Нов контакт. - person John; 23.09.2013

Моля, променете xpath на връзката към

xpath=//a[contains(text(),'<whatevertext>')]

В случай, че същата текстова връзка вече присъства в някоя част от страницата, можем да продължим със събития. Пример, ако се повтаря втори път:

xpath=(//a[contains(text(),'<whatevertext>')])[2]

Ако нищо не работи, най-добрият начин е чрез изпълнител на java скрипт.

Първо вземете уеб елемента на връзката.

След това използвайте следния код" webelement=driver.findElement(by.xpath("=//a[contains(text(),'')] ")) (JavaScriptExecutor)driver.executescript("argument[0].click( );",уелемент)

person Nainappa Illi    schedule 23.09.2013

Всъщност //div[@class='noprint']/span[@class='headertext']/a[3]/ е абсолютен XPath.

тъй като завършва с [3], позицията винаги ще варира, така че е препоръчително да използвате относителен XPath/CSS

Предложен CSS:css=.noprint > .headertext > a.classname Друг препоръчан CSS: css=.noprint > .headertext > a[attribute='value']

Така че можем да използваме всеки от горните формати.

person user3487861    schedule 03.04.2014