Сценарий:
существует класс java, приведенный ниже:
public class TestSelenium {
public void googleTest() throws Exception {
WebDriver driver = new InternetExplorerDriver();
driver.get("http://www.google.com/webhp?complete=1&hl=en");
}
}
Существует программа perl, которая использует модуль Inline :: Java для вызова класса googleTest класса java, написанного выше. Программа Perl выглядит.
use warnings;
use Selenium::Remote::Driver;
use Inline Java => 'STUDY',
CLASSPATH => 'C:\selenium\selenium-java-2.37.0\selenium-2.37.0\libs\selenium-java-2.37.0.jar;C:\selenium\SeleniumTestPoc\bin\MyJar.jar;C:\selenium\selenium-java-2.37.0\selenium-2.37.0\libs\selenium-server-standalone-2.37.0.jar',
STUDY => ['TestSelenium'];
$test= TestSelenium->new;
$test->googleTest;
Теперь вышеуказанный код Perl откроет IExplorer и перейдите на страницу google.com. В моей программе Perl далее $test-> googleTest; Я хочу использовать тот же браузер, который был открыт java (WebDriver driver = new InternetExplorerDriver();) и выполнить поиск текста "Сыр".
Вопрос в том, может ли объект класса WebDriver ("драйвер" в этом случае) использоваться в моей программе Perl, чтобы я мог использовать тот же браузер и выполнять различные операции пользовательского интерфейса на нем в Perl?
Я предполагаю, что если вы принесете переменную WebDriver
за пределы метода googleTest()
(сделав ее доступной для всех методов в классе), вы можете написать другие методы в TestSelenium
которые ссылаются на тот же WebDriver
который вы можете вызвать в perl.
Измените TestSelenium
на что-то вроде этого:
public class TestSelenium {
private WebDriver driver = new InternetExplorerDriver();
public void googleTest() throws Exception {
driver.get("http://www.google.com/webhp?complete=1&hl=en");
}
public void searchForCheese() throws Exception {
// Your actions here can still reference the driver
}
}
И после того, как вы $test= TestSelenium->new;
Выполнение $test->googleTest;
и $test->searchForCheese;
должен теоретически ссылаться на один и тот же драйвер и, в свою очередь, на одно и то же окно браузера.
РЕДАКТИРОВАТЬ :
Если вы хотите передать объект driver
обратно в perl, попробуйте что-то вроде этого.
Измените java-метод googleTest()
чтобы вернуть драйвер после его выполнения (я буду использовать ваш оригинальный метод, но оба должны работать):
public WebDriver googleTest() throws Exception {
WebDriver driver = new InternetExplorerDriver();
driver.get("http://www.google.com/webhp?complete=1&hl=en");
return driver;
}
И тогда я думаю, что вы можете подключиться к дескриптору драйвера в perl через $mydriver= $test->goggleTest;
Я предполагаю, что вы сможете получить доступ к $mydriver
WebDriver
через $mydriver
googleTest()
включают изменение типа возвращаемого значения сvoid
наWebDriver
и добавление строки в концеreturn driver;
методаreturn driver;
вернуть объект "водитель".