2015-11-02 3 views
0

Это касается модуля WWW :: Selenium от CPAN от Perl. У меня проблема с поиском BigBroLot1446130409 в HTML. Это выпадающее меню.Поиск элемента из выпадающего меню

Вот HTML

<select name="lot_id" id="lot_id" title=""> 
<option value="">Select an Available Lot</option> 


<option value="497"> 
    BigBroLot1446130409 
    - 0g 
    (100 credits to list) 
</option> 

<option value="500"> 
    BigBroLot1446133752 
    - 199g 
    (100 credits to list) 
</option> 

Когда я использую этот код, он actutally работает.

$locator = q{//select[@id="lot_id" and @name="lot_id"]}; 
$ret = $sel->wait_for_element_present($locator, $timeout); 
$ret = $sel->select($locator, "value=497"); 

Код выше работ, но в реальных условиях тестирования, но мне нужно найти элемент на основе текста BigBroLot1446130409, а не на value=497.

<option value="497"> 
    BigBroLot1446130409 
    - 0g 
    (100 credits to list) 
</option> 

Это выпадающее меню, так что я думаю, что нужно использовать следующую функцию из документации:

$sel->select($select_locator, $option_locator) 

Любая помощь будет принята с благодарностью.

+0

@ikegami Я не буду использовать регулярные выражения, я перефразировать вопрос , благодаря. – BioRod

ответ

0

Как указывалось ранее, я хочу выбрать из выпадающего меню на основе «BigBroLotXXXXXX», которое является переменной. В документации модуля есть функция называется

$sel->get_select_options($select_locator) 

Gets all option labels in the specified select drop-down. 
$select_locator is an element locator identifying a drop-down menu 
Returns an array of all option labels in the specified select drop-down. 

Итак, я был в состоянии знать, что все мой выбор из выпадающего меню был в массиве.

Функция, чтобы выбрать элемент из выпадающего меню является:

$sel->select($select_locator, $option_locator) 

документация для этого модуля состояний, $ option_locator может быть:

label=labelPattern:matches options based on their labels 

label=regexp:^[Oo]ther 

value=valuePattern:matches options based on their values. 

id=id:matches options based on their ids. 

index=index:matches an option based on its index (offset from zero). 

Во-первых, мне нужно определить локатор, где мой массив вариантов, поэтому я могу подать его в функцию get_select_options:

$locator = q{//select[@id="lot_id" and @name="lot_id"]}; 

my @array = $sel->get_select_options($locator); 

Для улыбок, я хотел убедиться, что @array ли есть выбор в них:

Select an Available Lot 
BigBroLot1446130409 - 0g (100 credits to list) 
BigBroLot1446087714 - 0g (100 credits to list) 
BigBroLot1446665592 - 36g (100 credits to list) 
BigBroLot1446060974 - 0g (100 credits to list) 
BigBroLot1446668987 - 64g (100 credits to list) 

Как указано в функции $sel-select, я могу найти элементы с помощью индексов, так что я использовал это как мой option_locator для $sel->select функции с помощь модуля List::MoreUtils. Например позволяет сказать $xyz = BigBroLot1446130409

use List::MoreUtils qw(first_index); 
use 5.010; 
my ($index) = grep { $array[$_] =~ /$xyz/ } (0 .. @array-1); 

А вот код, который выбрал мой элемент из выпадающего меню:

$locator = q{//select[@id="lot_id" and @name="lot_id"]}; 
$ret = $sel->select($locator,"index=$index"); 
Смежные вопросы