Powershell Selenium выберите выпадающее меню с помощью FindElementByCssSelector - PullRequest
0 голосов
/ 26 сентября 2019

Я использую Selenium, чтобы попытаться открыть веб-страницу, ввести учетные данные для входа в систему, нажать кнопку входа в систему, щелкнуть новый параметр управления изменениями, затем ввести свое имя и выбрать его из раскрывающегося списка.У меня все это работает до выпадающей части.Вот фотография моей записи:

Pic

Итак, вот код, который я использую (я использую модуль Selenium, потому что я думал, что это облегчит жизнь) У меня имя пользователя и пароль запутаны, поэтому они не отображаются в виде открытого текста

$LandeskUrl = "The site I'm going to is here"

$Driver = Start-SeChrome
Enter-SeUrl $LandeskUrl -Driver $Driver

###Logon screen

#user name
$UserName = Find-SeElement -Driver $Driver -Id "Ecom_User_ID"
Send-SeKeys -Element $UserName -Keys $passCreds.UserName

#password field
$Password = Find-SeElement -Driver $Driver -Id "Ecom_User_Password"
Send-SeKeys -Element $Password -Keys $thePass

#click logon button
$LogonButton = Find-SeElement -Drive $Driver -Id "logonButton"
Invoke-SeClick -Element $LogonButton

##Landesk screen

#select "Create New Change Control"
$NewCCR = Find-SeElement -Drive $Driver -Id "shortcutItem_4765085e-1b8b-44a1-a896-883efb86f151"
Invoke-SeClick -Element $NewCCR

#select user field and type name
$User = Find-SeElement -Drive $Driver -Id "mainForm-RaiseUser2Display"
Send-SeKeys -Element $User -Keys "My user name here"

#THIS IS WHERE I'M HAVING TROUBLE
$dropDown = $Driver.FindElementByCssSelector(".dropdownItem:nth-child(2)");
Invoke-SeClick -Element $dropDown

Вот HTML-код тестируемой страницы, плюс ссылка https://drive.google.com/file/d/1mYHqApsGue1IE-Zm9Eqwz2aiXKk7jIO2/view:

<div class="dropdown" id="mainForm-RaiseUser2-Dropdown" style="height: 503px; left: 299px; top: 171px; width: 973px; display: none;">
    <div class="dropdownContent" style="height: 502.5px;"></div>
    <div class="dropdownFooter"></div>
</div>

И вот вывод, который я получаю:

Exception calling "FindElementByCssSelector" with "1" argument(s): "no such 
element: Unable to locate element: {"method":"css 
selector","selector":".dropdownItem:nth-child(2)"}
  (Session info: chrome=77.0.3865.90)"
At C:\Scripts\SeleniumWebAutomation.ps1:36 char:1
+ $dropDown = $Driver.FindElementByCssSelector(".dropdownItem:nth-child ...
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
+ FullyQualifiedErrorId : NoSuchElementException

Invoke-SeClick : Cannot bind argument to parameter 'Element' because it is null.
At C:\Scripts\SeleniumWebAutomation.ps1:37 char:25
+ Invoke-SeClick -Element $dropDown
+                         ~~~~~~~~~
+ CategoryInfo          : InvalidData: (:) [Invoke-SeClick], ParameterBindingV 
   alidationException
+ FullyQualifiedErrorId : ParameterArgumentValidationErrorNullNotAllowed,Invok 
   e-SeClick

1 Ответ

0 голосов
/ 26 сентября 2019

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

Учитывая следующий HTML-код для выпадающего меню:

<div class="dropdownContent" style="height: 502.5px; overflow-y: auto;"><div class="dropdownItem" value="00000000-0000-0000-0000-000000000000" params="{}">

И следующий HTML-код дляэлемент раскрывающегося меню:

<div class="dropdownItem dropdownSelectedItem" value="fcbe6ca8-1ab7-4083-ae17-075139afa876" params="{}">mylastname, myfirstname</div>

Похоже, вы хотите развернуть раскрывающийся список, щелкнув его, а затем выберите параметр раскрывающегося списка, содержащий текст фамилия, имя.Заменив последние две строки кода, вот как я это сделаю:

# First expand the dropdown
$dropDown = $Driver.FindElementByXPath("//div[@class='dropdownContent']");
Invoke-SeClick -Element $dropDown

# Not sure on the syntax but you may need to Invoke WebDriverWait here, before you can click element.

# Click the desired option
$dropdownOption = $Driver.FindElementByXPath("//div[text()='mylastname, myfirstname']");
Invoke-SeClick -Element $dropdownOption
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...