Я новичок и в Споке, и в Селениде, поэтому я прошу прощения, если что-то очевидно, но я не смог найти ответ в Google.
Я пытаюсь написать простой тест для сайта Jenkins (тестовый компьютер имеет доступ только к локальным ресурсам, поэтому я не могу привести пример Google, но должен быть примерно таким же).
Открывает сайт, вводит слово в поле поиска, нажимает Enter, а затем проверяет результаты поиска на совпадение.
Есть три класса:
1. JenkinsTest - где тест написан в нотации Спока.
2. JenkinsPage - отвечает за выставление теста в поле поиска и нажатие Enter.
3. SearchResultsPage - отвечает за проверку результатов поиска.
Проблема в том, что SearchResultsPage, похоже, открывает свое собственное окно браузера вместо просмотра существующего. Поэтому, когда я смотрю на $ («тело») из этого класса, я получаю «Это начальная стартовая страница для сервера 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)
}
}