Я новичок как в Spock, так и в Selenide, поэтому прошу прощения, если это что-то очевидно, но я не смог найти ответ в Google. Я пытаюсь написать простой тест для сайта Jenkins (тестовая машина имеет доступ только к локальным ресурсам, поэтому я не могу привести пример Google, но должно быть примерно так же).
Он открывает сайт, вводит слово в поле поиска, нажимает Enter, а затем проверяет результаты поиска на соответствие.
Есть три класса: 1. JenkinsTest — где тест написан в нотации Спока. 2. JenkinsPage — отвечает за ввод теста в поле поиска и нажатие Enter. 3. SearchResultsPage — отвечает за проверку результатов поиска.
Проблема в том, что SearchResultsPage, похоже, открывает собственное окно браузера вместо того, чтобы смотреть в существующее. Поэтому, когда я смотрю на $("body") этого класса, я получаю "Это начальная страница для сервера WebDriver". Есть ли способ иметь класс на странице, и при этом все они подключены к одному и тому же окну браузера? В настоящее время JenkinsPage использует то же окно, которое было открыто изначально, но SearchResultsPage открывает новое окно браузера, которое закрывается через секунду.
JenkinsTest.groovy:
package sandbox-test;
import org.junit.Test;
import static com.codeborne.selenide.CollectionCondition.sizeGreaterThan;
import static com.codeborne.selenide.Condition.text;
import static com.codeborne.selenide.Selenide.open;
import org.openqa.selenium.chrome.ChromeOptions;
import spock.lang.*
class JenkinsTest extends spock.lang.Specification {
public void "Can search for assure"() {
setup:
open("http://local.hostname.com/jenkins/")
when:
new JenkinsPage().searchFor("test")
SearchResultsPage results = new SearchResultsPage()
then:
results.getResults() == "testresults"
}
}
JenkinsPage.groovy:
package sandbox-test;
import org.openqa.selenium.By;
import static com.codeborne.selenide.Selenide.$;
import static com.codeborne.selenide.Selenide.page;
class JenkinsPage {
def searchFor(String text) {
$(By.name("q")).val(text).pressEnter()
}
}
SearchResultsPage.groovy:
package sandbox-test;
import com.codeborne.selenide.ElementsCollection;
import com.codeborne.selenide.SelenideElement;
import static com.codeborne.selenide.Selenide.$;
import static com.codeborne.selenide.Selenide.$$;
class SearchResultsPage {
public ElementsCollection getResults() {
return $("body")
}
public SelenideElement getResult(int index) {
return $("#main-panel li", index)
}
}