#java #xpath #junit #css-selectors #selenium-rc
#java #xpath #junit #css-селекторы #selenium-rc
Вопрос:
Я пытаюсь автоматизировать следующий сценарий с selenium RC:
- Откройте домашнюю страницу Google и введите «Программное обеспечение» в поле поиска, а затем нажмите на кнопку поиска.
- Нажмите на первую ссылку из нескольких ссылок, полученных с помощью поиска Google.
Поскольку я не вижу атрибутов name или id для этих ссылок и поскольку содержимое этой ссылки является динамическим, я пытаюсь использовать XPath или CSS.
Из Firebug я получил XPath, а также CSS, щелкнув правой кнопкой мыши, затем скопируйте XPath, скопируйте CSS.
XPATH:/html/body/div[2]/div/div/div[6]/div[2]/div/div[2]/div/ol/li[1]/div/span/h3/a
CSS:html body#gsr div#main div div#cnt div#nr_container div#center_col div#res.med div#search div#ires ol#rso li.g div.vsc span.tl h3.r a.l
Я попытался ввести указанный выше XPath в selenium IDE в target и кнопку find. Это сработало нормально
но когда я использую вышеупомянутый XPath или CSS в selenium RC как:
selenium.click("xpath=//html/body/div[2]/div/div/div[6]/div[2]/div/div[2]/div/ol/li[1]/div/span/h3/a");
selenium.click("css=html body#gsr div#main div div#cnt div#nr_container div#center_col div#res.med div#search div#ires ol#rso li.g div.vsc span.tl h3.r a.l");
Обе приведенные выше строки не работают и выдают ошибку.
Пожалуйста, предложите.
Мой код выглядит следующим образом:
package Eclipse_Package;
import com.thoughtworks.selenium.*;
import org.junit.*;
//import org.junit.Before;
//import org.junit.Test;
import java.util.regex.Pattern;
public class Selenium_SX extends SeleneseTestCase {
// public class Jun3
@Before
public void setUp() {
selenium = new DefaultSelenium("localhost", 4444, "*firefox3 C:\Program Files (x86)\Mozilla Firefox\firefox.exe", "http://www.google.co.in/");
selenium.start();
}
// C:Program Files (x86)Mozilla Firefox
@SuppressWarnings("deprecation")
@Test
public void test() {
selenium.open("http://www.google.com");
selenium.windowMaximize();
// selenium.waitForPageToLoad("5000");
// selenium.type("id=acpro_inp3", "selenium");
selenium.type("q", "software");
selenium.click("btnG");
selenium.waitForPageToLoad("7000");
// selenium.fireEvent("Selenium web application testing system", "click");
// selenium.click("link=Selenium web application testing system");
// selenium.click("xpath=//html/body/div[2]/div/div/div[6]/div[2]/div/div[2]/div/ol/li[1]/div/span/h3/a");
selenium.click("xpath=(//a[class="li[1]"])[1]");
// selenium.click("css=//div['span.tl h3.r a.l']");
selenium.waitForPageToLoad("15000");
}
@After
public void tearDown() {
selenium.stop();
}
// public static void main(String args[])throws Exception{
// Selenium_SX sx=new Selenium_SX();
// sx.setUp();
// sx.test();
// sx.tearDown();
// }
}
Комментарии:
1. Вы уверены, что ждете достаточно времени перед выполнением команды click?
2. Можете ли вы добавить свой исходный код.
3. пожалуйста, найдите код в отредактированном сообщении и, пожалуйста, предложите. Кроме того, когда я добавляю waitforpagetoload после нажатия кнопки поиска, я получаю ошибку тайм-аута, хотя я увеличил время до 15000 секунд. Итак, я попытался прокомментировать оператор wait во время моего первого поста здесь
4. Вы не упомянули конкретную ошибку в своем сообщении. Не могли бы вы, пожалуйста, добавить точную ошибку конкретно?
Ответ №1:
Просто примечание, у Google есть запрет на автоматические запросы. Я использовал Google для тестирования, когда был новичком в тестировании, теперь я использую наш собственный сервер.
То, что вы ищете, это:
//a[contains(text(), 'software')]
При этом выбирается первая ссылка с «программным обеспечением» в тексте ссылки.
Ответ №2:
Попробуйте этот xpath (//a[@class="l"])[1]
Комментарии:
1. Попробовал оба приведенных ниже варианта, но они не сработали. selenium.click(«xpath=(//ссылка[@class=»»])[1]»); selenium.click(«xpath=(//a[@class=»l»])[1]»);
Ответ №3:
между двумя щелчками мыши должна быть пауза (pause (1) ) или waitForElementPresent вот рабочий образец для PHPUnit. Странно, но clickAndWait не работает
$this->open("/");
$this->type("q", "software");
$this->click("btnG");
for ($second = 0; ; $second ) {
if ($second >= 60) $this->fail("timeout");
try {
if ($this->isElementPresent("//a[@class='l']")) break;
} catch (Exception $e) {}
sleep(1);
}
$this->click("//a[@class='l']");