2017-11-10 9 views
4

아래 그림에서 문자열을 가져오고 싶습니다. 경고, 프롬프트 또는 대화 상자 안에 있습니다. 내 코드는 Perl로 작성되었으며 Selenium Webdriver를 사용하여 페이지를 탐색합니다.selenium webdriver를 사용하여 perl의 경고/프롬프트/대화 상자에있는 텍스트를 얻으려면 어떻게해야합니까?

  • 는 셀레늄과 링크를 찾아
  • 가에서 문자열을 얻을 나타나는 경고를 기다리는 것이
  • 클릭 : 내가 지금까지 달성 한 무엇

    Image shows the alert and the Url I want from it

    알림, 텍스트 필드의 문자열은 아닙니다.

코드

my $copy_elem = wait_until {  
    $d->find_element_by_id('clipboard-link'); 
};   
$copy_elem->click; 

select undef, undef, undef, 8.00; 

my $alert = wait_until { 
    $d->get_alert_text; 
}; 

$alert 출력은 "링크 복사"

그래서 내가 원하는 텍스트가 경고의 텍스트 필드 내부입니다. get_alert_text를 사용하면 경고 문자열 만 가져 오지만 텍스트 필드 내용은 가져올 수 없습니다. 웹에서 답변을 검색하고 창 핸들을 사용하는 사람들이 경고로 전환하는 것을 보았습니다.

CPAN Selenium Webdriver Docu with list of functions

내가 윈도우 핸들을 얻고 배열로로드했지만, 그것은 경고에 대한 두 번째 창 핸들을 얻을하지 않습니다 나는 셀레늄 Webdriver의 문서에서 유사한 기능을 찾기 위해 노력했다. get_current_window_handle도 작동하지 않습니다. 나는 브라우저로 phantomjs와 chrome을 사용했다. 내가 아는 한 perl에는 driver.switchto().alert();이 없습니다.

+0

두 번째 연결이 끊어집니다. 첫 번째 이미지와 동일한 이미지를 포함합니다. – simbabque

+0

오 감사합니다. 나는 그것을 바꿀 것입니다! – SaikaVA

답변

4

한 가지 방법은 스크립트 주입 페이지에서 prompt 함수를 재정의하는 것입니다

# override the prompt function 
$d->execute_script('window.prompt=function(message, input){window.last_prompt = {message: message, input: input}};'); 

# trigger a prompt 
select undef, undef, undef, 8.00; 

# get the prompt default input 
my $input = $d->execute_script('return window.last_prompt.input;'); 
+0

당신의 해결책이 효과가있었습니다! 스크립트 실행 사이에 클릭 만 복사하여 붙여 넣기 만하면됩니다. – SaikaVA