2016-08-15 6 views
0

Я пытаюсь автоматизировать с помощью selenium python, чтобы выбрать конкретный элемент из списка элементов на веб-странице. Это на первой странице веб-страницы. Я выбираю один элемент списка из 5 отображаемых элементов, позже мне нужно отменить их на следующей странице веб-сайта, где перечислены все пять номеров. Как я могу выбрать тот конкретный элемент, который я выбрал на первой странице веб-страницы?Выберите конкретный элемент на веб-странице из списка, используя selenium python

HTML-код элемента первого списка страниц выглядит следующим образом ->

<li class="ng-scope" ng-repeat="line in accountLines"> 
<label class="list-item inline-group"> 
<div class="inline-group-addon"> 
<div class="inline-group-main"> 
<p class="ng-binding"> 
</div> 

и я сформировал XPath как:

.//*[@id='oobe-login']/body/div[1]/main/div/div[1]/ul/li[1]/label/div[2]/p 
.//*[@id='oobe-login']/body/div[1]/main/div/div[1]/ul/li[2]/label/div[2]/p 
.//*[@id='oobe-login']/body/div[1]/main/div/div[1]/ul/li[3]/label/div[2]/p 
.//*[@id='oobe-login']/body/div[1]/main/div/div[1]/ul/li[4]/label/div[2]/p 
.//*[@id='oobe-login']/body/div[1]/main/div/div[1]/ul/li[5]/label/div[2]/p 

и HTML код следующей страницы, которая содержит список все элемент:

li class="ng-scope" ng-repeat="line in allLinesList"> 
<a class="list-item inline-group reverse highlight" ng-click="expandSettings($index)" ng-class="(settings.selectedLine === $index && settings.expanded) ? 'active' : ''" href=""> 
</li> 

я Jus сделать текст здесь галочку, который является жестким типом кодирования, чтобы выбрать номер я я выбрал на первой странице.

Может ли кто-нибудь предложить мне решение, чтобы селен-webdriver нажимал на каждый элемент на следующей странице и проверял, зарегистрирован ли он, если он зарегистрирован, отменяет регистрацию? Пожалуйста помоги.

ответ

1

Я не уверен, какой webdriver вы используете, но фрагмент, который я здесь включил, работал для меня с драйверами Firefox, Chrome и CasperJS.

Чтобы выберите параметр в раскрывающемся списке, вы хотите использовать что-то вроде следующего, используя одну из ваших XPATH атрибутов выше:

opt_button = driver.wait.until(EC.element_to_be_clickable((By.XPATH, """.//*[@id='oobe-login']/body/div[1]/main/div/div[1]/ul/li[1]/label/div[2]/p"""))) 
try: 
    opt_button.click() #This is the part that actually selects the option 
    print "Clicked the list item!" 
except ElementNotVisibleException, s: 
    print "Could not click the list item..." 
    print "Error: "+str(s) 

Селен дает возможность ждать элемента к быть загруженным и кликабельным, поэтому говорить, что ваш драйвер ждет этого, обычно является хорошим способом предотвращения ошибок на страницах с медленной загрузкой.

Что касается отмены выбора опции, вы должны иметь либо список, который предлагает выбор NULL, либо сценарий на странице, чтобы очистить ваш выбор при загрузке страницы. Я не очень разбираюсь в JavaScript, но считаю, что может быть способ внедрить скрипт, чтобы отменить выбор элемента списка. Возможно, вы захотите выполнить поиск в Google для способов удаления списков с помощью JS, но я уверен, что для этого вам потребуются условия.

Смежные вопросы